在Python中实现字典循环

时间:2013-01-31 12:48:21

标签: python

  

可能重复:
  python looping seems to not follow sequence?
  In what order does python display dictionary keys?

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

上面的代码每次运行时都会给出不同的输出。输出不完全不同,但输出顺序不同。我使用Aptana 3多次执行代码。

首次执行: 10 9 20

第二次执行: 20 10 9

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

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

2 个答案:

答案 0 :(得分:3)

字典是键到值的映射;它没有订单。

您需要collections.OrderedDict

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]

但请注意,字典排序确定性的 - 如果您对同一字典进行两次迭代,则会得到相同的结果。

答案 1 :(得分:1)

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