Python:在OrderedDict上按字母顺序迭代

时间:2013-05-23 04:17:10

标签: python python-2.7 ordereddictionary

在脚本中,我有一个OrderedDict groups,它按字母顺序输入键/值对。

在脚本的另一部分中,我正在检查与key相同的文件,如下所示:

for (key, value) in groups.items():        
    file = open(key, 'r') 
    # do stuff

东西发生得很好,其中一部分是为每个文件打印一个状态行,但我怎样才能让Python按字母顺序迭代groups,或者至少按照它们的顺序进行数字化(因为它们正在输入按字母顺序反正)?

2 个答案:

答案 0 :(得分:3)

OrderedDict的重点是你可以按输入键的顺序正常迭代它:

>>> from collections import OrderedDict
>>> d = OrderedDict()
>>> d[1] = 2
>>> d[0] = 3
>>> d[9] = 2
>>> for k, v in d.items():
        print(k, v)


(1, 2)
(0, 3)
(9, 2)

请确保您没有提供OrderedDict(...)字典来初始化它,或者它是从无序开始的。

答案 1 :(得分:1)

如果你想要做的就是按照键的顺序遍历字典,你可以使用常规字典和sorted()

>>> d = dict(s=5,g=4,a=6,j=10)
>>> d
{'g': 4, 's': 5, 'j': 10, 'a': 6}
>>> for k in sorted(d):
        print(k, ':', d[k])


a : 6
g : 4
j : 10
s : 5
>>> 

(原谅python3 print()

如果您真的想坚持使用有序的字典,请阅读documentation,其中显示重新排序OrderedDict的示例:

>>> # regular unsorted dictionary
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}

>>> # dictionary sorted by key
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])

如果你真的首先按字母顺序将它们输入OrderedDict,那么我不确定你为什么遇到麻烦。

相关问题