35

我有一个 Python 字典,看起来像这样:

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

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

而不是说

for key in D:
    # some code...

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

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

4

4 回答 4

45

你可以使用这个:

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

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

于 2013-02-13T21:34:17.707 回答
7

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

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

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

于 2013-02-13T21:42:28.437 回答
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]
于 2013-02-13T22:54:31.933 回答
2

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

for key in sorted(D.keys()):
    print key, D[key]
于 2013-02-13T21:34:16.667 回答