gpt4 book ai didi

python - 在 Python 3.7 中 Counter/defaultdict 如何排序?

转载 作者:行者123 更新时间:2023-12-04 08:52:07 24 4
gpt4 key购买 nike

我们知道在 Python 3.6 字典中插入排序作为实现细节,在 3.7 中可以依赖插入排序。

我预计 dict 的子类也是如此。如collections.Countercollections.defaultdict .但这似乎只适用于 defaultdict案子。

所以我的问题是:

  • defaultdict 的顺序是真的吗?但不适用于 Counter ?如果是这样,是否有一个简单的解释?
  • 应该订购这些dict collections 中的子类模块被认为是实现细节?或者,例如,我们可以依赖 defaultdictdict 这样的插入命令在 Python 3.7+ 中?

  • 这是我的基本测试:

    字典:已订购
    words = ["oranges", "apples", "apples", "bananas", "kiwis", "kiwis", "apples"]

    dict_counter = {}
    for w in words:
    dict_counter[w] = dict_counter.get(w, 0)+1

    print(dict_counter)

    # {'oranges': 1, 'apples': 3, 'bananas': 1, 'kiwis': 2}

    计数器:无序
    from collections import Counter, defaultdict

    print(Counter(words))

    # Counter({'apples': 3, 'kiwis': 2, 'oranges': 1, 'bananas': 1})

    默认字典:已订购
    dict_dd = defaultdict(int)
    for w in words:
    dict_dd[w] += 1

    print(dict_dd)

    # defaultdict(<class 'int'>, {'oranges': 1, 'apples': 3, 'bananas': 1, 'kiwis': 2})

    最佳答案

    Counterdefaultdict现在都订购了,您可以信赖它。 Counter只是看起来不有序,因为它的 repr是在保证 dict 排序之前设计的,并且 Counter.__repr__ sorts entries by descending order of value .

    def __repr__(self):
    if not self:
    return '%s()' % self.__class__.__name__
    try:
    items = ', '.join(map('%r: %r'.__mod__, self.most_common()))
    return '%s({%s})' % (self.__class__.__name__, items)
    except TypeError:
    # handle case where values are not orderable
    return '{0}({1!r})'.format(self.__class__.__name__, dict(self))

    关于python - 在 Python 3.7 中 Counter/defaultdict 如何排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52174284/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com