12

リストとは異なり、辞書は順序付けされていません (また、'sort' 属性がありません)。したがって、最初に追加したときに同じ順序でアイテムを取得することに依存することはできません。

キー値として文字列を含む辞書をループし、キーの昇順で取得する最も簡単な方法は何ですか?

たとえば、これがありました:

d = {'b' : 'this is b', 'a': 'this is a' , 'c' : 'this is c'}

キーでソートされた次の順序で関連する値を出力したいと思います。

this is a
this is b
this is c
4

8 に答える 8

17

キーの値でソートされた値が必要だということですか? その場合、これはそれを行うべきです:

for key in sorted(d):
    print d[key]

編集: sorted(d.keys()) の代わりに sorted(d) を使用するように変更されました。ありがとうEli !

于 2008-09-10T20:10:05.687 に答える
16

あるいはもっと短く、

for key, value in sorted(d.items()):
    print value
于 2008-09-10T20:10:51.550 に答える
1

このスニペットはそうします。頻繁に行う場合は、'sortkeys' メソッドなどを作成して見やすくすることをお勧めします。

keys = list(d.keys())
keys.sort()
for key in keys:
    print d[key]

編集:dFのソリューションの方が優れています-sorted()についてすべて忘れていました。

于 2008-09-10T20:08:48.933 に答える
1

辞書を値で並べ替えて、並べ替え順序を制御することもできます。

import operator

d = {'b' : 'this is 3', 'a': 'this is 2' , 'c' : 'this is 1'}

for key, value in sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True):
    print key, " ", value

出力:
b これは 3
a これは 2
c これは 1

于 2008-09-12T15:11:00.007 に答える
1
>>> d = {'b' : 'this is b', 'a': 'this is a' , 'c' : 'this is c'}
>>> for k,v in sorted(d.items()):
...     print v, k
... 
this is a a
this is b b
this is c c
于 2008-09-10T20:11:55.073 に答える
1
for key in sorted(d):
  print d[key]
于 2008-09-11T09:34:47.153 に答える
0

「順序付け」ではなく「並べ替え」という意味ですか?あなたの質問は、辞書の並べ替えではなく、並べ替えを目的としているようです。「順序付けられた」という意味であれば、collections モジュールの OrderedDict を使用できます。これらの辞書は、キーと値のペアが入力された順序を記憶しています。

from collections import OrderedDict

参考情報:https ://docs.python.org/2/library/collections.html#collections.OrderedDict

于 2016-10-28T08:52:25.280 に答える
0
d = {'b' : 'this is b', 'a': 'this is a' , 'c' : 'this is c'}
ks = d.keys()
ks.sort()
for k in ks:
    print "this is " + k
于 2008-09-10T20:12:48.173 に答える