按排序顺序迭代按键的Python字典

时间:2013-02-13 21:31:54

标签: python loops sorting dictionary

我在Python中有一个字典,如下所示:

D = {1:'a', 5:'b', 2:'a', 7:'a'}

键的值大多无关紧要。有没有办法按数字顺序按键遍历字典?键都是整数。

而不是说

for key in D:
    # some code...

我可以按照1, 2, 5, 7的顺序浏览字典键吗?

此外,我无法使用排序/排序功能。

4 个答案:

答案 0 :(得分:41)

您可以使用:

for key in sorted(D.iterkeys()):
    .. code ..

在Python 3.x中,使用D.keys()(与Python 2.x中的D.iterkeys()相同)。

答案 1 :(得分:7)

考虑到你不想排序的规定,并假设键都是整数,你可以简单地找到键的最大值和最小值,然后迭代该范围并检查每个键是否实际在字典。

for key in xrange(min(D), max(D) + 1):
    if key in D:
        print D[key]

当然,这不是很有效,但它工作,并且它避免了排序。

答案 2 :(得分:6)

假设按键/值按顺序插入,您可以使用OrderedDict

>>> from collections import OrderedDict
>>> d = OrderedDict()
>>> d[1] = 'a'
>>> d[2] = 'a'
>>> d[5] = 'b'
>>> d[7] = 'a'
>>> d
OrderedDict([(1, 'a'), (2, 'a'), (5, 'b'), (7, 'a')])
>>> d.keys()
[1, 2, 5, 7]

答案 3 :(得分:2)

您可以使用dict.keys()获取密钥列表,然后遍历列表的已排序视图:

for key in sorted(D.keys()):
    print key, D[key]