如何反转Python字典中键的顺序?
这是我的代码:
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]