web-dev-qa-db-ja.com

Pythonソートされた順序でキーによって辞書を反復処理する

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

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

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

言う代わりに

for key in D:
    # some code...

辞書キーを順番に確認できますか1, 2, 5, 7

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

32
ben

これを使用できます:

_for key in sorted(D.iterkeys()):
    .. code ..
_

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

42
isedev

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

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

もちろん、これはあまり効率的ではありませんが、willは機能し、ソートを回避します。

7
kindall

キー/値が順番に挿入されると仮定すると、 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]
6
JCash

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

for key in sorted(D.keys()):
    print key, D[key]
2
Rohit Jain