2011-07-17 5 views
0

次のように私は辞書を持っている:辞書の値を降順で表示するにはどうすればいいですか?

{'aapl': 4.0, 
'abandon': 4.0, 
'absenc': 3.0, 
'accept': 1.0, 
'access': 3.0, 
'accessori': 4.0, 
'accord': 3.0, 
'achiev': 1.0, 
'acquir': 1.5, 
'acquisit': 2.3333333333333335, 
'across': 5.0, 
'activ': 2.0, 
'ad': 2.2692307692307692, 
'add': 2.5, 
'addit': 2.8333333333333335, 
} 

を、私は彼らのスコア(降順)でそれらを表示するにはどうすればよいですか?

タプルなどで行う方法があると聞いたことがありますか?

答えて

5
>>> D={'aapl': 4.0, 
... 'abandon': 4.0, 
... 'absenc': 3.0, 
... 'accept': 1.0, 
... 'access': 3.0, 
... 'accessori': 4.0, 
... 'accord': 3.0, 
... 'achiev': 1.0, 
... 'acquir': 1.5, 
... 'acquisit': 2.3333333333333335, 
... 'across': 5.0, 
... 'activ': 2.0, 
... 'ad': 2.2692307692307692, 
... 'add': 2.5, 
... 'addit': 2.8333333333333335, 
... } 
>>> sorted(D, key=D.get, reverse=True) 
['across', 'aapl', 'accessori', 'abandon', 'accord', 'access', 'absenc', 'addit', 'add', 'acquisit', 'ad', 'activ', 'acquir', 'accept', 'achiev'] 
>>> 

あなたも値をしたい場合は、

>>> from operator import itemgetter 
>>> sorted(D.items(), key=itemgetter(1), reverse=True) 
[('across', 5.0), ('aapl', 4.0), ('accessori', 4.0), ('abandon', 4.0), ('accord', 3.0), ('access', 3.0), ('absenc', 3.0), ('addit', 2.8333333333333335), ('add', 2.5), ('acquisit', 2.3333333333333335), ('ad', 2.2692307692307692), ('activ', 2.0), ('acquir', 1.5), ('accept', 1.0), ('achiev', 1.0)] 
+0

+1の' d.get'に!ここで 'itemgetter'の必要はありません。 – senderle

+0

私は 'd.get'が好きです。間違いなく「itemgetter」が遅くなりますが、もっときれいです。 – tomasz

0
by_score = yourdict.items() 
by_score.sort(key=operator.itemgetter(1), reversed=True) 
+0

私はあなたがS/CMP /キー –

+0

とS /コレクション/オペレータ –

+0

@gnibblerを意味すると思う:ありがとう。私は愚かな気がする。 – SingleNegationElimination

0
mydict = {'aapl': 4.0, 
'abandon': 4.0, 
'absenc': 3.0, 
'accept': 1.0, 
'access': 3.0, 
'accessori': 4.0, 
'accord': 3.0, 
'achiev': 1.0, 
'acquir': 1.5, 
'acquisit': 2.3333333333333335, 
'across': 5.0, 
'activ': 2.0, 
'ad': 2.2692307692307692, 
'add': 2.5, 
'addit': 2.8333333333333335, 
} 
sorted([(y,x) for x,y in mydict.items()], reverse=True) 

これは生成:

[(5.0, 'across'), (4.0, 'accessori'), (4.0, 'abandon'), (4.0, 'aapl'), (3.0, 'accord'), (3.0, 'access'), (3.0, 'absenc'), (2.8333333333333335, 'addit'), (2.5, 'add'), (2.3333333333333335, 'acquisit'), (2.269230769230769, 'ad'), (2.0, 'activ'), (1.5, 'acquir'), (1.0, 'achiev'), (1.0, 'accept')] 

これは値が同じである値(例えば、== 3.0のキーによるソートの副作用があり、 'absenc' < 'アクセス< 'アコード')

+0

どうすれば元に戻すことができますか? – TIMEX

+0

引数に「reverse = True」を追加します。私はそれを逃した:^) – Nate

+0

@TIMEX、キーワード引数 'reverse = True'を渡す –

1

それは私が知っている最速の方法です:

d = { ... } # your dictionary 
for name, score in sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True): 
    print score, name 
関連する問題