Python 如何对具有不同键的嵌套字典列表进行排序
我有以下清单:Python 如何对具有不同键的嵌套字典列表进行排序,python,list,sorting,dictionary,Python,List,Sorting,Dictionary,我有以下清单: mylist = [ { 'frame': { 'aaa': 50 } }, { 'frame': { 'bbb': 12 } }, { 'frame': { 'ccc': 23 } }, { 'frame': { 'ddd': 72 } } ] 我希望根据那些不同的整数值对列表进行排序,键为'aaa',bbb',ccc',等等 我已经看到了这一点,但关键是这个问题是一致的 非常感谢您的帮助 编辑:我想要的输出是: sorted_list = [
mylist = [
{ 'frame': { 'aaa': 50 } },
{ 'frame': { 'bbb': 12 } },
{ 'frame': { 'ccc': 23 } },
{ 'frame': { 'ddd': 72 } }
]
我希望根据那些不同的整数值对列表进行排序,键为'aaa',bbb',ccc',等等
我已经看到了这一点,但关键是这个问题是一致的
非常感谢您的帮助
编辑:我想要的输出是:
sorted_list = [
{ 'frame': { 'ddd': 72 } },
{ 'frame': { 'aaa': 50 } },
{ 'frame': { 'ccc': 23 } },
{ 'frame': { 'bbb': 12 } }
]
对这个问题的答案稍加修改,你就会明白这一点
sorted_list = sorted(mylist, key=lambda k: k['frame'][list(k['frame'].keys())[0]], reverse=True)
本质上,它只是进入列表,然后按值排序。将reverse
设置为True以使其反转列表
mylist = sorted(mylist, key=lambda k: -list(k["frame"].values())[0])
print(mylist)
印刷品:
[{'frame': {'ddd': 72}},
{'frame': {'aaa': 50}},
{'frame': {'ccc': 23}},
{'frame': {'bbb': 12}}]
您可以对键使用lambda
,该键只返回dict
中帧下存储的第一个值
我们使用with得到第一个值。这样可以避免创建新的列表
对象
我们还将reverse
参数作为True
传递,因此我们首先得到最大的数字。
:
字典总是只有一个键/值对吗?如果是,请按values()
中的第一项排序。我不明白。此输入的预期结果是什么?从嵌套字典中,您关心哪一个键/值对?您如何知道?@MarkM yes。在我的例子中,键是“frame”,它的值是字典。无论如何,方法与链接答案中的方法相同。您需要能够编写一个函数,告诉您与mylist
的每个项目对应的值,然后使用key=
“在我的例子中,键是'frame',它的值是字典”No;我们所说的字典就是值。除了对lambda
返回的值求反之外,您还可以在sorted
调用中使用reverse=True
。比如:sorted(mylist,key=lambda k:list(k[“frame”].values())[0],reverse=True)
。这样做的优点是,它也适用于计算非数字(但仍可排序)结果(如字符串)的key
函数。
>>> mylist = [
... { 'frame': { 'aaa': 50 } },
... { 'frame': { 'bbb': 12 } },
... { 'frame': { 'ccc': 23 } },
... { 'frame': { 'ddd': 72 } }
... ]
>>> sorted(mylist, key=lambda d: next(iter(d['frame'].values())), reverse=True)
[{'frame': {'ddd': 72}},
{'frame': {'aaa': 50}},
{'frame': {'ccc': 23}},
{'frame': {'bbb': 12}}]