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)
有没有办法让我只能打印出第一个键值对?
我基本上是想打印给定字符串中的第一个重复字符。
问题是它__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)