Python循环字典按指定顺序排列

时间:2014-03-01 23:19:56

标签: python loops dictionary

我遇到了循环字典的问题。以下代码:

d = {}
d['a'] = 1
d['b'] = 2
d['c'] = 3
for k,v in d.iteritems():
    print k,v

结果:

a 1
c 3
b 2

但理想的结果是:

a 1
b 2
c 3

有谁知道如何以某种方式修复循环以保留元素的分配顺序?谢谢!

2 个答案:

答案 0 :(得分:2)

在Python中,普通词典被设计为无序的。意思是,不应该在这里使用它们。

相反,您应该使用collections.OrderedDict

>>> from collections import OrderedDict
>>> d = OrderedDict()
>>> d['a'] = 1
>>> d['b'] = 2
>>> d['c'] = 3
>>> for k,v in d.iteritems():
...     print k,v
...
a 1
b 2
c 3
>>>

与普通字典不同,OrderedDict保证保留元素的分配顺序。

答案 1 :(得分:1)

字典不保留顺序,因此您需要对键进行排序:

for k,v in sorted(d.iteritems,key=lambda x: x[0]):
    print k,v

或者,使用collections.OrderedDict对象,该对象在内部维护按插入顺序的键列表:

import collections
d = collections.OrderedDict()
...
for k,v in d.iteritems():
    print k,v