簡體   English   中英

在Python中按鍵排序字典列表

[英]Sorting a list of dictionaries by key in Python

我在Python中有一個字典列表,每個字典只包含一個數字鍵,我想按鍵排序。 例:

list = [{.56: 'a'}, {1.0: 'a'}, {.98: 'b'}, {1.0: 'c'}]

我想對此進行排序並返回如下內容:

[{1.0: 'a'}, {1.0: 'c'}, {.98: 'b'}, {.56: 'a'}]

在鍵值相同的情況下,我不關心它們是如何排序的。 我嘗試過使用.sort().sorted() ,但是我無法弄清楚這些論點。

這是@dkamins的簡化版本

>>> lst = [{.56: 'a'}, {1.0: 'a'}, {.98: 'b'}, {1.0: 'c'}]
>>> sorted(lst, key=max, reverse=True)
[{1.0: 'a'}, {1.0: 'c'}, {0.98: 'b'}, {0.56: 'a'}]

回想一下max(d.keys())返回與max(d)相同的結果

lambda d: max(d)只是在max調用周圍包含另一個函數,所以我們可以把它留下來

這將適用於Python 2和3:

>>> mylist = [{.56: 'a'}, {1.0: 'a'}, {.98: 'b'}, {1.0: 'c'}]

>>> sorted(mylist, key=lambda d: max(d.keys()), reverse=True)
[{1.0: 'a'}, {1.0: 'c'}, {0.98: 'b'}, {0.56: 'a'}]

它使用sortedkey參數根據每個dict的最大鍵進行排序,在這種情況下,如果你只有一個,它就是第一個。

另一種解決方案可能有效,但這更直截了當。

PS在像Python這樣的內置list之后,不要命名你的變量。

使用Python 3+,因為它會像@Simon提到的那樣拋出錯誤。 這取決於你的詞典是單身人士:

>>> lst = [{.56: 'a'}, {1.0: 'a'}, {.98: 'b'}, {1.0: 'c'}]
>>> sorted(lst, key=lambda d: d.keys()[0], reverse=True)
[{1.0: 'a'}, {1.0: 'c'}, {0.98: 'b'}, {0.56: 'a'}]

至少在Python 3.3中,@ Hai Vu的注釋不起作用,因為它引發了類型錯誤,因為dict()不是可訂購類型。 但是,如果我們可以將字典轉換為可訂購類型,例如一個元組列表,則評論建議給出答案:

>>>> L = [{.56: 'a'}, {1.0: 'a'}, {.98: 'b'}, {1.0: 'c'}]
>>>> L2 = sorted([list(zip(x.keys(),x.values())) for x in L],reverse=True)
>>>> L2
[[(1.0, 'c')], [(1.0, 'a')], [(0.98, 'b')], [(0.56, 'a')]]
>>>> [{k: v for (k,v) in x} for x in L2]
[{1.0: 'c'}, {1.0: 'a'}, {0.98: 'b'}, {0.56: 'a'}]

我們從給定數據開始,分配給L而不是list以避免與list關鍵字混淆。 然后我們使用列表推導來創建元組列表的列表,其中每個子列表是壓縮在一起的鍵和每個字典的值。 作為列表,然后可以通過sorted()函數對它們sorted()

不幸的是,我們不再有字典列表,所以下一步是使用列表理解中的字典理解將元組列表轉換回字典列表,將每個元組列表轉換為字典然后將它們作為列表一起返回。

暫無
暫無

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

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