[英]Sorting a list of dicts by dict values
我有以下詞典列表
a = [{23:100}, {3:103}, {2:102}, {36:103}, {43:123}]
如何對其進行排序以獲得:
a = [{43:123}, {3:103}, {36:103}, {2:102}, {23:100}]
我的意思是,按照其dicts的值按降序對列表進行排序。
除了brandizzi的答案,你可以選擇:
sorted(a, key=dict.values, reverse=True)
幾乎相同的東西,但可能更慣用。
>>> sorted(a, key=lambda i: i.values()[0], reverse=True)
[{43: 123}, {3: 103}, {36: 103}, {2: 102}, {23: 100}]
您可以將一個key
參數傳遞給list.sort()
方法,因此將根據key
的返回值進行比較:
>>> a = [{23:100}, {3:103}, {2:102}, {36:103}, {43:123}]
>>> a.sort(key=lambda d: d.values()[0], reversed=True)
>>> a
[{23: 100}, {2: 102}, {3: 103}, {36: 103}, {43: 123}]
在這種情況下,鍵是一個函數,它接收字典d
並使用.values()
獲取其值的列表。 由於只有一個值,我們從返回的列表中獲取此值。 然后, list.sort()
方法將在排序時比較那些返回的值,而不是字典本身。
在python 3中,其他答案不再有效,因為dict.values()
現在返回一個dict視圖對象而不是列表。 要從視圖對象中提取值,我們可以使用iter
和next
的組合:
a.sort(key=lambda dic: next(iter(dic.values())), reverse=True)
我寧願使用(或至少記住) .itervalues()
In [25]: sorted(a, key=lambda x: next(x.itervalues()), reverse=True)
Out[25]: [{43: 123}, {36: 103}, {2: 102}, {23: 100}, {3: 103}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.