簡體   English   中英

將字典鍵排序為相等的值

[英]Sorting dictionary keys for the equal values

我有一本使用計數器構成的字典:

c = collections.Counter()
for y in all_years:  # iterator
    c[y] += 1
d = dict(c.most_common())
print(d)

/ 所有年份包含250年值的列表 /

結果:{1995:9,1957:7,2003:7,2000:7,2001:6,1975:6,2014:6,2009:6,1994:5,1999:5,2010:5,2002: 1997年5月5日}

是否可以按年份對字典進行等值排序:例如{1995:9,1957:7,2000:7,2003:7,1975:6,2001:6,2014:6等}

為了獲得預期的結果,這是您需要做的高級分解。

  1. 建立Counter ,只需經過all_years

  2. python <3.6中的字典默認情況下不排序,因此您需要使用OrderedDict

  3. 排序時,請確保您按多個謂詞排序-首先是value ,然后是key

from collections import Counter, OrderedDict

c = Counter(all_years)
r = OrderedDict(sorted(d.items(), key=lambda x: (-x[1], x[0])))

OrderedDict([(1995, 9),
             (1957, 7),
             (2000, 7),
             (2003, 7),
             (1975, 6),
             (2001, 6),
             (2009, 6),
             (2014, 6),
             (1994, 5),
             (1997, 5),
             (1999, 5),
             (2002, 5),
             (2010, 5)])

感謝Stefan Pochmann的改進。

為了進一步解釋key=lambda x: (-x[1], x[0]) ,它是這樣工作的:

  • 您想按值對對排序。 因此, x[1]首先出現。 您還想按降序排序,因此取反。 由於x[1]被保證為計數,因此這對於任何Counter輸出都適用
  • 接下來,您想按年份排序,因此下一個是x[0]

在python 3.6中,只需將sorted的結果傳遞給dict構造函數-

r = dict(sorted(d.items(), key=lambda x: (-x[1], x[0])))

字典是按成對傳遞的順序構建的。

暫無
暫無

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

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