【问题标题】:Iterate through Python dictionary by Keys in sorted order [duplicate]按排序顺序通过键遍历Python字典[重复]
【发布时间】:2023-03-04 02:33:01
【问题描述】:

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

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

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

而不是说

for key in D:
    # some code...

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

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

【问题讨论】:

    标签: python loops sorting dictionary


    【解决方案1】:

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

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

    【讨论】:

    • 有没有办法在不显式使用排序功能的情况下做到这一点?这是挑战的一部分,我们必须在不使用排序功能的情况下对所有内容进行排序。对不起,我应该早点提到这一点。
    • @ben。然后你必须编写自己的排序逻辑。但是你为什么要重新发明轮子呢?
    • 通常是因为有人在他的 CS 作业中使用堆栈溢出。
    【解决方案2】:

    你可以用这个:

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

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

    【讨论】:

    • 有没有办法在不显式使用排序功能的情况下做到这一点?这是挑战的一部分,我们必须在不使用排序功能的情况下对所有内容进行排序。对不起,我应该早点提到这一点。
    • 最后一件事。你知道有什么其他的方法来对键进行排序吗?非常感谢您的帮助。
    • 要求未排序...然后接受排序:/
    • 生活就是这样;)
    • 来人评论一下这个的表现?如果这样的循环需要经常发生怎么办。 sorted() 每次都会重新排序吗?有没有办法始终保持按键排序的字典,以便按键顺序迭代它是有效的?类似于 C++ 中的std::map
    【解决方案3】:

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

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

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

    【讨论】:

    • 这是一个聪明的技巧。但如果字典只说 2 个键,11000000??怎么说?
    • 是的,排序肯定更好!
    • 这仍然为 OP 提供了他想要的东西。
    【解决方案4】:

    假设键/值是按顺序插入的,可以使用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]
    

    【讨论】:

    • 如果您不想更改现有字典,只需为您的有序字典创建一个临时变量并将其设置为 OrderedDict(D) >>> from collections import OrderedDict >>> a = {' a': 'A', 'b': 'B', 'c': 'C'} >>> OrderedDict(a) 返回 -> OrderedDict([('a', 'A'), ('b' , 'B'), ('c', 'C')])
    猜你喜欢
    • 1970-01-01
    • 2013-05-18
    • 2021-06-05
    • 1970-01-01
    • 2014-10-26
    • 2015-04-07
    • 2018-08-13
    • 1970-01-01
    • 2014-08-02
    相关资源
    最近更新 更多