[英]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}}]
您可以使用lambda
sorted
的key
,它只返回存儲在'frame'
鍵下的dict
中的第一個值。
我們通過使用next
和iter
獲得第一個值。 這避免了創建新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.