Python, 有一个列表 rd, 每个元素是一个字典, 每个字典的 value 还是一个字典(字典套字典); 要求如下: 根据最内层嵌套的字典的一个 key:is_analysis 从小到大排序,并返回不包含列表中每个元素中的 key 值
比如: 输入 ``` rd = [ {100: {"id": 1, "name": "wade", "code": "abc", "is_analysis": 7}}, {101: {"id": 2, "name": "lebron", "code": "abc", "is_analysis": 3}}, {102: {"id": 3, "name": "cp3", "code": "abc", "is_analysis": 5}}, {104: {"id": 4, "name": "melo", "code": "abc", "is_analysis": 0}}]
输出:
[{'id': 4, 'name': 'melo', 'code': 'abc', 'is_analysis': 0},
{'id': 2, 'name': 'lebron', 'code': 'abc', 'is_analysis': 3},
{'id': 3, 'name': 'cp3', 'code': 'abc', 'is_analysis': 5},
{'id': 1, 'name': 'wade', 'code': 'abc', 'is_analysis': 7}]
1
JCZ2MkKb5S8ZX9pq 2020-12-05 12:03:17 +08:00
sorted list d.values() lambda v:v['isanalysis']
就这几个拼一下就行 懒得试了 |
2
l4ever 2020-12-05 15:14:24 +08:00
一楼不厚道, 小花花给我.
``` rd = [ {100: {"id": 1, "name": "wade", "code": "abc", "is_analysis": 7}}, {101: {"id": 2, "name": "lebron", "code": "abc", "is_analysis": 3}}, {102: {"id": 3, "name": "cp3", "code": "abc", "is_analysis": 5}}, {104: {"id": 4, "name": "melo", "code": "abc", "is_analysis": 0}}] rd.sort(key=lambda i: list(i.values())[0].get('is_analysis', 0)) print(rd) ``` |
3
l4ever 2020-12-05 15:20:26 +08:00
对不起, 没审题. 修改了一下
``` rd = [{100: {"id": 1, "name": "wade", "code": "abc", "is_analysis": 7}}, {101: {"id": 2, "name": "lebron", "code": "abc", "is_analysis": 3}}, {102: {"id": 3, "name": "cp3", "code": "abc", "is_analysis": 5}}, {104: {"id": 4, "name": "melo", "code": "abc", "is_analysis": 0}}] # 取 list 下的 dict 下的第一个值, 重新组成 list rd = list(map(lambda x:list(x.values())[0],rd)) # 根据 list 下的 dict 某个值排序 rd.sort(key=lambda i:i.get('is_analysis', 0)) print(rd) ``` |
4
imn1 2020-12-05 15:30:18 +08:00
这题昨天问过?我健忘了?
|
5
aijam 2020-12-05 16:39:56 +08:00
sorted((y for x in rd for y in x.values()), key = lambda x: x['is_analysis'])
|
6
liuxingdeyu 2020-12-05 16:57:44 +08:00
最优雅的不是写到一行里,是写的清清楚楚简简单单,让下一个人能看的舒舒服服
|
7
teekgeek 2020-12-05 17:58:33 +08:00
列表里面套两层字典又要做排序太坑爹 可以的话 最好是一层字典
排序的时候我把你的两层字典改成了一层 排序后的数据 是重新生成的与原来结构相同的数据 同时可以指定以内层字典的某个个 k 排序 ``` rd = [ {100: {"id": 1, "name": "wade", "code": "abc", "is_analysis": 7}}, {101: {"id": 2, "name": "lebron", "code": "abc", "is_analysis": 3}}, {102: {"id": 3, "name": "cp3", "code": "abc", "is_analysis": 5}}, {104: {"id": 4, "name": "melo", "code": "abc", "is_analysis": 0}}] new_rd=[{**v,'father_id':k} for i in rd for k,v in i.items()] def get_sort_rule(sort_k='id'): def sort_rule(rd_item:dict): return rd_item.get(sort_k,0) return sort_rule new_rd.sort(key=get_sort_rule('is_analysis')) sorted_rd=[{i.pop('father_id'):i} for i in new_rd] print(sorted_rd) ``` |
8
no1xsyzy 2020-12-05 21:11:21 +08:00
你是不是问过一遍这个问题……
你的问题没描述清楚;但如果你把你的问题描述清楚,那就是代码了。 「编程是一种古老艺术的重新表达,这种古老艺术的名字叫做“思考”」 |