2012-02-20 55 views
0

也許這很明顯,但是如何按字典中的值數對字典進行排序?按每個鍵下的值數排序字典

一樣,如果這樣:

{ 
    "2010": [2], 
    "2009": [4,7], 
    "1989": [8] 
} 

會變成這樣:

{ 
    "2009": [4,7], 
    "2010": [2], 
    "1989": [8] 
} 

我怎麼會只返回了關鍵的> 1的值

"2009": [4,7] 

回答

6

字典是無序的,所以有沒有辦法對字典本身進行排序。您可以將字典轉換爲有序的數據類型。在Python 2.7或以上,你可以使用collections.OrderedDict

from collections import OrderedDict 
d = {"2010": [2], "2009": [4,7], "1989": [8]} 
ordered_d = OrderedDict(sorted(d.viewitems(), key=lambda x: len(x[1]))) 
+0

+1指出字典是無序的。 – chucksmash 2012-02-20 15:37:11

2

標準dict類型基本上是一個哈希表,並且不允許用戶重新排序的鍵。你可以,但是,實現這一目標用OrderedDict

In [1]: d = { 
    ...:  "2010": [2], 
    ...:  "2009": [4,7], 
    ...:  "1989": [8] 
    ...: } 

In [2]: from collections import OrderedDict 

In [5]: OrderedDict(sorted(d.items(), key=lambda (k,v):len(v), reverse=True)) 
Out[5]: OrderedDict([('2009', [4, 7]), ('2010', [2]), ('1989', [8])]) 

篩選出短於兩個元素的條目:

In [7]: dict((k,v) for k,v in d.items() if len(v) > 1) 
Out[7]: {'2009': [4, 7]}