您可以尝试使用 Counter(Python 2.7 及更高版本;有关 2.7 之前的选项,请参见下文):
>>> from collections import Counter
>>> Counter('abbba')
Counter({'b': 3, 'a': 2})
然后,您可以像访问字典一样访问元素:
>>> counts = Counter('abbba')
>>> counts['a']
2
>>> counts['b']
3
要进行迭代,您可以使用@BurhanKhalid 的建议(其Counter
行为类似于字典,您可以在其中迭代键/值对):
>>> for k, v in Counter('abbba').iteritems():
... print k, v
...
a 2
b 3
如果您使用的是 2.7 之前的 Python 版本,您可以使用 adefaultdict
来稍微简化您的代码(过程仍然相同 - 唯一的区别是现在您不必先检查密钥 - 它会 '如果找不到匹配的键,则默认为 0)。Counter
它内置了其他功能,但如果您只是想要计数(例如,不关心most_common
或能够subtract
),这应该没问题,可以像任何其他字典一样对待:
>>> from collections import defaultdict
>>> counts = defaultdict(int)
>>> for c in 'abbba':
... counts[c] += 1
...
>>> counts
defaultdict(<type 'int'>, {'a': 2, 'b': 3})
当您iteritems()
在字典(或此处的Counter
/ defaultdict
)上使用时,每次迭代都会返回一个键和一个值(在这种情况下,键是字母,值是出现的次数)。'a', 'b', ...
关于使用字典要注意的一件事是它们本质上是无序的,因此在迭代时不一定会得到。以排序方式遍历字典的一种基本方法是遍历键的排序列表(这里按字母顺序,但sorted
可以操作以处理各种选项),并返回该键的字典值(有其他方式,但这有望提供一些信息):
>>> mapping = {'some': 2, 'example': 3, 'words': 5}
>>> mapping
{'some': 2, 'example': 3, 'words': 5}
>>> for key in sorted(mapping.keys()):
... print key, mapping[key]
...
example 3
some 2
words 5