按排序的键遍历Python字典

35 投票
4 回答
47718 浏览
提问于 2025-04-17 15:49

我在Python中有一个字典,长得像这样:

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

这个字典里的键对应的值大多数都不重要。有没有办法按照数字顺序遍历这个字典的键呢?这些键都是整数。

我想要的不是说

for key in D:
    # some code...

我能按照顺序 1, 2, 5, 7 来遍历字典的键吗?

另外,我不能使用sort或sorted这些函数。

4 个回答

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]
7

考虑到你不想进行排序,并且假设所有的键都是整数,你可以简单地找到这些键中的最大值和最小值,然后在这个范围内逐个检查每个数字是否真的在字典里。

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

当然,这种方法效率不是很高,但它确实可以工作,而且避免了排序。

45

你可以使用这个:

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

在Python 3.x中,使用 D.keys() (这和Python 2.x中的 D.iterkeys() 是一样的)。

撰写回答