2009-02-22 10 views
109

私は各キーがint値を参照するdictを持っています。値に応じてキーをリストにソートする最良の方法は何ですか?Pythonで辞書キーを並べ替える

+7

をまた、これは、リンクされた答えは値によってソートについてです、キーでソートについて質問。 – ForeverWintr

+0

以下の答えは、キーのソートされたリストのみを返します(これは簡単です)。値による並べ替えに関する「重複した」質問に対する答えは、値によってソートされたキー/値のペアのソートされたリストを返します。キーでソートする場合は、単にoperator.itemgetter()のパラメータの代わりに0を使用します。 – ScienceFriction

答えて

91
>>> mydict = {'a':1,'b':3,'c':2} 
>>> sorted(mydict, key=lambda key: mydict[key]) 
['a', 'c', 'b'] 
12
my_list = sorted(dict.items(), key=lambda x: x[1]) 
+1

@ user815423426 "s/list/my_list /'の投稿を編集したのは、 "リストはPythonのキーワードです"です。あなたの編集は問題ありませんが、リストはキーワード(c.f. https://docs.python.org/3/reference/lexical_analysis.html#keywords)ではないので、私のプログラムの断片は(バイトコードで)コンパイルして実行します。しかし、これは '__builtins__'名前空間の名前であり、その名前をシャドーするのは悪いことです。例えば、listという名前のロケール変数とそれを上書きすることは恐ろしいです。 'list = tuple'です。 –

2
[v[0] for v in sorted(foo.items(), key=lambda(k,v): (v,k))] 
346

私はこの1つのように:

sorted(d, key=d.get) 
+0

ニースは、キーでソートされた(キー、値)ペアを提供する洗練されたソリューションを持つことがいいと思っていました。 ... dict変数名を複数回提供する必要はありません(私は非常に長い変数名を持つ傾向があります)。 d.iteritems()は依然として最も有用なようです。 – travc

+0

エレガントでソートされたk、vペアのソリューション – crock1255

関連する問題