在Python中实现字典循环

Implementing for loop on a dictionary in Python

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
python looping seems to not follow sequence?
In what order does python display dictionary keys?

1
2
3
d = {'x': 9, 'y': 10, 'z': 20}
for key in d:
    print d[key]

上面的代码每次运行时提供不同的输出。不是完全不同的输出,而是以不同的顺序输出。我用Aptana3执行了多次代码。

第一次执行给出:十九二十

第二次执行给出:二十十九

我还在一个在线的IDE http://labs.codecademy.com中执行了代码。在那里输出总是10 9 20

我只是想知道这是为什么。理想情况下,每次执行上述代码时,它都应该打印9 10 20。请解释一下。


字典是键到值的映射;它没有顺序。

你想要一个collections.OrderedDict

1
2
3
4
5
collections.OrderedDict([('x', 9), ('y', 10), ('z', 20)])
Out[175]: OrderedDict([('x', 9), ('y', 10), ('z', 20)])

for key in Out[175]:
    print Out[175][key]

但是请注意,字典排序是确定的——如果您对同一个字典重复两次,您将得到相同的结果。


字典是未排序的集合。所以在理论上,元素的顺序可能会随着你对它执行的每一个操作而改变。如果您希望按顺序打印密钥,则必须在打印之前对其进行排序(即收集密钥,然后对其进行排序)。