35

次のような Python の辞書があります。

D = {1:'a', 5:'b', 2:'a', 7:'a'}

キーの値はほとんど無関係です。キーを数値順に辞書を反復処理する方法はありますか? キーはすべて整数です。

と言う代わりに

for key in D:
    # some code...

辞書のキーを順番に見ていくことはできます1, 2, 5, 7か?

また、並べ替え/並べ替え機能を使用できません。

4

4 に答える 4

45

あなたはこれを使うことができます:

for key in sorted(D.iterkeys()):
    .. code ..

Python 3.xでは、を使用します( Python 2.xD.keys()と同じです)。D.iterkeys()

于 2013-02-13T21:34:17.707 に答える
7

並べ替えたくないという規定を考慮し、キーがすべて整数であると仮定すると、キーの最大値と最小値を簡単に見つけて、その範囲を反復処理し、それぞれが実際に辞書にあるかどうかを確認できます。

for key in xrange(min(D), max(D) + 1):
    if key in D:
        print D[key]

もちろん、これはあまり効率的ではありませんが、機能し、並べ替えを回避します。

于 2013-02-13T21:42:28.437 に答える
6

キー/値が順番に挿入されると仮定すると、OrderedDictを使用できます。

>>> from collections import OrderedDict
>>> d = OrderedDict()
>>> d[1] = 'a'
>>> d[2] = 'a'
>>> d[5] = 'b'
>>> d[7] = 'a'
>>> d
OrderedDict([(1, 'a'), (2, 'a'), (5, 'b'), (7, 'a')])
>>> d.keys()
[1, 2, 5, 7]
于 2013-02-13T22:54:31.933 に答える
2

を使用してキーのリストを取得し、リストのdict.keys()並べ替えられたビューを反復処理できます。

for key in sorted(D.keys()):
    print key, D[key]
于 2013-02-13T21:34:16.667 に答える