Pythonに次のような辞書があります:
D = {1:'a', 5:'b', 2:'a', 7:'a'}
キーの値はほとんど無関係です。数字順にキーで辞書を反復処理する方法はありますか?キーはすべて整数です。
言う代わりに
for key in D:
# some code...
辞書キーを順番に確認できますか1, 2, 5, 7
?
さらに、並べ替え/並べ替え機能を使用できません。
これを使用できます:
_for key in sorted(D.iterkeys()):
.. code ..
_
In Python 3.x、D.keys()
を使用します(これはD.iterkeys()
と同じですin Python 2.x )。
ソートしたくないという条件を考慮し、キーがすべて整数であると仮定すると、キーの最大値と最小値を単純に見つけ、その範囲を反復処理して、それぞれが実際に辞書にあるかどうかを確認できます。
for key in xrange(min(D), max(D) + 1):
if key in D:
print D[key]
もちろん、これはあまり効率的ではありませんが、willは機能し、ソートを回避します。
キー/値が順番に挿入されると仮定すると、 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]
dict.keys()
を使用してキーのリストを取得し、リストのソートされたビューを反復処理できます。
for key in sorted(D.keys()):
print key, D[key]