打印有序计数器中的第一个键值

Vis*_*wak 4 python python-2.7 python-collections

我正在尝试按照 OrderedCounter 输出中显示的顺序打印出键值对。

from collections import Counter, OrderedDict

class OrderedCounter(Counter, OrderedDict):
    pass

c = OrderedCounter('supernatural')
print c
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

OrderedCounter({'u': 2, 'r': 2, 'a': 2, 's': 1, 'p': 1, 'e': 1, 'n': 1, 't': 1, 'l': 1})
Run Code Online (Sandbox Code Playgroud)

有没有办法让我只能打印出第一个键值对?

我基本上是想打印给定字符串中的第一个重复字符。

MSe*_*ert 5

问题是它__repr__被第一个超类使用(因为你没有重写它),那就是Counter. 的表示Counter是按值降序排序。事实上,您的子类化OrderedDict并且sorted是稳定的,这使得它看起来"u"是第一个元素。

但是Counter没有提供__iter__方法,因此您将使用仅保留插入顺序的__iter__方法:OrderedDict

>>> next(iter(c.items()))
('s', 1)
Run Code Online (Sandbox Code Playgroud)

要获取第一个重复字符,只需使用推导式:

>>> next((key, value) for key, value in c.items() if value > 1)
('u', 2)
Run Code Online (Sandbox Code Playgroud)

(对于Python2,您可能想使用iteritems()而不是items())

要打印第一个最常见的值,您可以使用以下Counter.most_common方法:

>>> c.most_common(1)
[('u', 2)]
Run Code Online (Sandbox Code Playgroud)