如何在python dict中反转键的顺序?

zjm*_*126 21 python reverse dictionary

这是我的代码:

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

for i in a:
    print i
Run Code Online (Sandbox Code Playgroud)

表明:

0
1
3
4
Run Code Online (Sandbox Code Playgroud)

但我想要它显示:

4
3
1
0
Run Code Online (Sandbox Code Playgroud)

那么,我该怎么办?

Sin*_*ion 34

迭代的顺序键是任意的.他们按顺序排列只是巧合.

>>> 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]
Run Code Online (Sandbox Code Playgroud)

  • 实际上你可以通过`sorted(a.keys(),reverse = True)来代替使​​用`reversed()`builtin来加速反转的情况. (17认同)

Rot*_*eti 23

由于Python 3.7 dicts保留 order,这意味着您现在可以执行此操作:

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

for k in reversed(list(my_dict.keys())):
    print(k)
Run Code Online (Sandbox Code Playgroud)

输出:

b
c
a
Run Code Online (Sandbox Code Playgroud)

由于Python 3.8内置也reversed()接受字典,因此您可以使用:

b
c
a
Run Code Online (Sandbox Code Playgroud)

  • 忽略会导致“SyntaxError”的额外“)”,dictviews也仅在Python 3.8中变得可逆,因此“reversed(my_dict.keys())”将在Python 3.7中引发“TypeError”。 (2认同)

Fel*_*ing 15

字典是无序的,所以你不能反转它们.当前输出的顺序是任意的.

也就是说,您当然可以订购钥匙:

for i in sorted(a.keys(), reverse=True):
    print a[i];
Run Code Online (Sandbox Code Playgroud)

但是这会给出排序键的相反顺序,而不一定是键的相反顺序.也就是说,1 0 3如果你的字典是:

a = {3:'3', 0:'0', 1:'1'}
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,似乎Python 3.7+中的词典实际上记得插入顺序[[源]](/sf/ask/2798622641/ )。 (2认同)

Nei*_*l G 11

尝试:

for i in sorted(a.keys(), reverse=True):
    print i
Run Code Online (Sandbox Code Playgroud)


Chr*_* W. 6

Python 词典没有任何关联的“顺序”。dict 打印相同的顺序只是一个“巧合”。不能保证字典中的项目以任何顺序出现。

如果要处理排序,则需要将字典转换为列表。

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
Run Code Online (Sandbox Code Playgroud)

现在您可以正常对列表进行排序,例如,a.sort()也可以将其反转,例如,a.reverse()

  • +1 用于解释所有其他答案实际上都在转换为列表。 (2认同)

Rum*_*kin 5

Python dict在2.x中未排序。但是在3.1中有一个有序的dict实现。