如何反转Python字典中键的顺序?

60 投票
11 回答
146738 浏览
提问于 2025-04-16 14:33

这是我的代码:

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

for i in a:
    print i

它显示的是:

0
1
3
4

但我想让它显示:

4
3
1
0

那么,我该怎么做呢?

11 个回答

20

字典是无序的,所以你不能反转它们。当前输出的顺序是随机的。

不过,你当然可以对键进行排序:

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

但是这样得到的是已排序键的反向顺序,并不一定是你添加键时的反向顺序。也就是说,如果你的字典是这样的:

a = {3:'3', 0:'0', 1:'1'}
44

Python 3.7开始,字典(dict)会保持插入的顺序,这意味着你现在可以这样做:

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

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

输出结果:

b
c
a

Python 3.8开始,内置的函数 reversed() 也可以接受字典作为输入。

下面是一个例子,展示如何使用这个函数来遍历字典:

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

for k in reversed(my_dict):
    print(k)

这里还有一个例子,展示如何将你的字典替换为一个反转的字典:

my_dict = dict(reversed(my_dict.items()))
59

注意:这个回答只适用于Python 3.7之前的版本。从3.7开始,字典的顺序是按照插入的顺序来的(在CPython 3.6中也是这样,只是作为一个实现细节)。


键的遍历顺序是随机的。它们恰好是按排序的顺序出现只是个巧合。

>>> 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]

撰写回答