簡體   English   中英

按dict值排序dicts列表

[英]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視圖對象而不是列表。 要從視圖對象中提取值,我們可以使用iternext的組合:

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.

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