Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对具有不同键的嵌套字典列表进行排序_Python_List_Sorting_Dictionary - Fatal编程技术网

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}}]