【发布时间】:2022-01-27 11:31:55
【问题描述】:
我有一个字典列表,其中一个值也是字典。在 python 中,我想按嵌套字典中的值对父列表进行排序。
示例:我需要按照 ['info']['a'] 的值从大到小对 my_list 进行排序。
my_list = [
{
"name" : "name1",
"info" : {
"a" : 1,
"b" : 2,
"c" : 3
}
},
{
"name" : "name2",
"info" : {
"a" : 3,
"b" : 2,
"c" : 1
}
},
{
"name" : "name3",
"info" : {
"a" : 2,
"b" : 3,
"c" : 4
}
}
]
到目前为止,我让它工作的最有效方法是将 ['info']['a'] 的值复制到父字典中的新键/值并根据该新值进行排序。
for d in my_list:
d.update({"info_a": d['info']['a']})
sorted_list = sorted(my_list, key=itemgetter('info_a'), reverse=True)
我让它工作的另一种方法是从某些键创建一个全新的字典列表,对其进行排序,然后使用它将字典一个一个地添加到一个新列表中。这似乎不必要地复杂和低效。
temp_list = []
sorted_list = []
for d in my_list:
entry = {}
entry.update({"name" : d['name'],
"info_a" : d['info']['a']})
temp_list.append(entry)
for temp_d in sorted(temp_list, key=itemgetter('a'), reverse = True):
for d in my_list:
if temp_d['name'] == d['name']:
sorted_list.append(d)
肯定有某种方法可以按嵌套值排序,而不必创建新对象?
【问题讨论】:
-
output = sorted(my_list, key=lambda dct: dct['info']['a'], reverse=True)不好吗?
标签: python sorting dictionary