簡體   English   中英

如何對具有不同鍵的嵌套字典列表進行排序

[英]How to sort a list of nested dictionaries with different keys

我有以下列表:

mylist = [
   { 'frame': { 'aaa': 50 } },
   { 'frame': { 'bbb': 12 } },
   { 'frame': { 'ccc': 23 } },
   { 'frame': { 'ddd': 72 } }
]

我希望根據具有不同鍵'aaa'、bbb'、'ccc'等的 integer 值對列表進行排序。

我見過這個問題,但關鍵是與這個問題一致。

非常感謝任何幫助!

編輯:我想要的 output 是:

sorted_list = [
       { 'frame': { 'ddd': 72 } },
       { 'frame': { 'aaa': 50 } },
       { 'frame': { 'ccc': 23 } },
       { 'frame': { 'bbb': 12 } }
]
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}}]

您可以使用lambdasortedkey ,它只返回存儲在'frame'鍵下的dict中的第一個值。

我們通過使用nextiter獲得第一個值。 這避免了創建新list object。

我們還將reverse參數作為True傳遞,因此我們首先獲得最大的數字。

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

對該問題的答案稍作調整,您就會得到這個有效的答案。

sorted_list = sorted(mylist, key=lambda k: k['frame'][list(k['frame'].keys())[0]], reverse=True)

本質上它只是進入列表,然后按值排序。 reverse設置為 True 以使其反轉列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM