如果所有其他频率都相同,集合中的计数器是否在考虑频率后保持顺序?

Does Counter from collections maintain order after frequency has been considered, if all other frequencies are the same?

集合中的计数器在考虑频率后是否保持顺序?

例如

s= "leetcode"
cnt = Counter(s)
for el in s:
    if cnt[el] == 1:
        return el

所以对于上面的代码,输出看起来像这样:

Counter({'e': 3, 'l': 1, 't': 1, 'c': 1, 'o': 1, 'd': 1})

现在,我知道计数器按降序显示 key/value,因此 'e' 首先出现,因为它的最高计数为 3,但在此之后所有其他元素的计数器都为 1-这意味着计数器将始终保持 string/array 的顺序?它显然适用于上面的示例,但我想确保不仅仅是我的 IDE 这样做 (Pycharm)

A Counter 实际上只是具有一些额外功能的 dict。底层字典在 Python 的最新版本中保留了插入顺序,正如所谓的 in the docs:

Changed in version 3.7: As a dict subclass, Counter Inherited the capability to remember insertion order.

你可以看到这个,如果你打印键,保持它们在源字符串中的顺序:

>>> print(cnt.keys())
dict_keys(['l', 'e', 't', 'c', 'o', 'd'])

但是,请注意 __repr__ 对订单有特定处理:

def __repr__(self):
    if not self:
        return f'{self.__class__.__name__}()'
    try:
        # dict() preserves the ordering returned by most_common()
        d = dict(self.most_common())
    except TypeError:
        # handle case where values are not orderable
        d = dict(self)
    return f'{self.__class__.__name__}({d!r})'

Counter 显示 most_common 顺序,其当前文档说:

Elements with equal counts are ordered in the order first encountered

实现使用sorted,即:

...guaranteed to be stable. A sort is stable if it guarantees not to change the relative order of elements that compare equal...

因此保留具有相同计数的元素的插入顺序。

但是,most_common 文档的

Earlier versions 说:

Elements with equal counts are ordered arbitrarily

因为字典的开头是任意排序的。