按索引获取字典中的有序键

时间:2014-10-15 12:52:31

标签: python python-2.7 dictionary

这似乎应该是一件相当简单的事情,但我一直无法做到。说我有一个字典:

d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}

我希望按照它们存储在字典中的顺序访问键。我原以为这会起作用:

print d.keys()[0]
banana

但实际结果是:

orange

显然这是因为python中的dictionaries are unordered。我尝试过使用collections.OrderedDict

from collections import OrderedDict as odict
d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
print odict(d).keys()

但结果是一样的。

我该怎么做?如果我这样做,那么执行此任务会有明显的复杂性吗?我怎样才能按顺序访问字典中的键?

2 个答案:

答案 0 :(得分:4)

源不应该是字典。使用其他保证顺序的序列(list,tuple,..):

>>> from collections import OrderedDict as odict
>>> d = [('banana', 3), ('apple', 4), ('pear', 1), ('orange', 2)]
>>> print odict(d).keys()
['banana', 'apple', 'pear', 'orange']

答案 1 :(得分:3)

当您尝试OrderedDict时,您仍然需要构建常规dict(在内部,在构造期间,可能与在代码中键入的内容有所不同,因此会导致构造的OrderedDict也可以不同的方式订购。

如果您按顺序添加项目,而不是"通过无序dict"然后OrderedDict将按预期工作。

from collections import OrderedDict
d = OrderedDict()

d['banana'] = 3
d['apple'] = 4
d['pear'] = 1
d['orange'] = 2

print d.keys()

或从序列数据类型开始(如果你真的想要dict - 就像行为一样):

In [127]: d = OrderedDict([('banana',3), ('apple',4), ('pear',1), ('orange',2)])

In [128]: d
Out[128]: OrderedDict([('banana', 3), ('apple', 4), ('pear', 1), ('orange', 2)])

In [129]: d.keys()
Out[129]: ['banana', 'apple', 'pear', 'orange']