这似乎应该是一件相当简单的事情,但我一直无法做到。说我有一个字典:
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()
但结果是一样的。
我该怎么做?如果我不这样做,那么执行此任务会有明显的复杂性吗?我怎样才能按顺序访问字典中的键?
答案 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']