2011-04-13 92 views
4

我有一個帶有鍵的字典和值作爲整數的字典。按python中的值對字典進行排序

是否可以按值排序字典?

我希望能夠在我的字典中發現前10位最常出現的單詞。這些值表示單詞計數,鍵表示單詞。

counter = 9 
for a,b in sorted(dict_.iteritems()): 
     if counter > 0: 
      print str(a),str(b)+"\n" 
      counter-=1 

這是我迄今爲止但它僅打印關閉在字典中的第10個項目。我將如何打印出前10個最常見的項目? (即具有最高INT作爲值值?)

回答

2

Python字典是無序的,但你可以將其轉換爲使用items()元組的列表,並通過一個合適的比較功能sortkey參數。

sorted()具有類似的關鍵參數。您想按lambda item: item[1]排序以獲取items()iteritems()的值。然後你可以切掉前N個項目。

所以......

for a, b in sorted(dict_.iteritems(), key=lambda item: item[1], reverse=True)[:10]: 
    print a, b 
+0

這不是現在 '爲A,B在排序(dict_.iteritems(),鍵=拉姆達項目:項目[1],反向= True)[:10]:' – 2014-07-22 13:07:57

+0

@MichaelTomkins:是! 2011我一定錯過了。 – nmichaels 2014-07-22 13:46:10

2

嘗試sorted(dict_.iteritems(), key=lambda item: -item[1])

+0

'-'是什麼? – khachik 2011-04-13 18:13:54

+0

@khachik:這是要顛倒名單。 – nmichaels 2011-04-13 18:24:37

+0

@nmichaels:那麼它應該由'lambda x:(x [0],-x [1])'映射回來?爲什麼不分類(...,key = ...,reverse = True)? – khachik 2011-04-13 18:26:53

2

使用

sorted(dict_.iteritems(), key=lambda x:x[1]) 

import operator 
sorted(.... key=operator.itemgetter(1)) 

排序基於元素的值。您可以使用reverse=True參數來反轉結果的順序(默認值或升序值)和切片符號(results[:10])以僅迭代前10個元素。您也可以省略反向標誌,並使用[-10:]以獲得前10名。

+1

啊,我愛我一些'運營商'。 – jathanism 2011-04-13 18:21:17

1

根本不能對字典進行排序。它們是無序的,即順序沒有定義,並且完全沒有意義(對你而言)。

但是,您可以將.iteritems()key=operator.itemgetter(1)排序(其他答案會取消該值,但您可以使用片段[-10:]獲取最後10個項目)。或者,在這種特殊情況下,只需使用collections.Counter,它隨.most_common(n)方法一起提供。

+0

無序的字典是顯而易見的,但問題是可以按值排序。 – damned 2012-02-05 16:28:18

0

爲了做到這一點,您應該使用key參數進行排序。 key必須是一個函數,它將一個元素作爲輸入並返回另一個應該可排序的元素,並使用該鍵對整個元素進行排序。並取最後10個元素(它按升序排序)。在你的情況,你需要做這樣的事情:

for a,b in sorted(key=lambda x: (x[1], x[0]), dict_.iteritems())[-10:]: 
    print str(a), str(b) 
相關問題