web-dev-qa-db-ja.com

python dictでキーの順序を逆にする方法は?

これは私のコードです:

a = {0:'000000',1:'11111',3:'333333',4:'444444'}

for i in a:
    print i

それが示している:

0
1
3
4

しかし、私はそれを見せたいです:

4
3
1
0

それで、なにかお手伝いできますか?

20
zjm1126

反復されるキーの順序は任意です。それらがソートされた順番に並んでいたのは偶然でした。

>>> a = {0:'000000',1:'11111',3:'333333',4:'444444'}
>>> a.keys()
[0, 1, 3, 4]
>>> sorted(a.keys())
[0, 1, 3, 4]
>>> reversed(sorted(a.keys()))
<listreverseiterator object at 0x02B0DB70>
>>> list(reversed(sorted(a.keys())))
[4, 3, 1, 0]

辞書は順序付けられていないため、逆順にすることはできません。現在の出力の順序は任意です。

とはいえ、もちろんキーを注文できます:

for i in sorted(a.keys(), reverse=True):
    print a[i];

しかし、これはsortedキーの逆順を提供します。必ずしも追加されたキーの逆順ではありません。つまり1 0 3辞書が次の場合:

a = {3:'3', 0:'0', 1:'1'}
15
Felix Kling

試してください:

for i in sorted(a.keys(), reverse=True):
    print i
11
Neil G

Python dictは、2.xでは順序付けられていません。しかし、 .1 には順序付けされたdict実装があります。

5

Python辞書には「順序」が関連付けられていません。それは、辞書が同じ順序を印刷しているという単なる「偶然」です。辞書内のアイテムが任意の順序で出てくるという保証はありません。

順序付けを処理する場合は、辞書をリストに変換する必要があります。

_a = list(a) # keys in list
a = a.keys() # keys in list
a = a.values() # values in list
a = a.items() # tuples of (key,value) in list
_

これで、リストを通常のように並べ替えることができます(例:a.sort())、逆に並べ替えることもできます(例:a.reverse()

4
Chris W.
for i in reversed(sorted(a.keys())):
    print i
1
Simon

Python 3.7 dicts preserve orderであるため、今すぐこれを行うことができます:

_my_dict = {'a': 1, 'c': 3, 'b': 2}

for k in reversed(my_dict.keys())):
    print(k)
_

出力:

_b
c
a
_

Python 3.8組み込みのreversed()も辞書を受け入れるため、次を使用できます。

_for k in reversed(my_dict):
    print(k)
_
0
Rotareti