Оба Counter
и defaultdict(int)
могут нормально работать здесь, но есть некоторые различия между ними:
Counter
поддерживает большинство операций, которые вы можете сделать на multiset. Итак, если вы хотите использовать эту операцию, перейдите в Counter.
Counter
не будет добавлять новые ключи к dict, когда вы запрашиваете отсутствующие ключи. Итак, если ваши запросы содержат ключи, которые могут отсутствовать в dict, лучше используйте Counter
.
Пример:
>>> c = Counter()
>>> d = defaultdict(int)
>>> c[0], d[1]
(0, 0)
>>> c
Counter()
>>> d
defaultdict(<type 'int'>, {1: 0})
Пример:
Counter
также имеет метод most_common
, который позволяет сортировать элементы по их подсчета. Чтобы получить то же самое в defaultdict
, вам нужно будет использовать sorted
.
Пример:
>>> c = Counter('aaaaaaaaabbbbbbbcc')
>>> c.most_common()
[('a', 9), ('b', 7), ('c', 2)]
>>> c.most_common(2) #return 2 most common items and their counts
[('a', 9), ('b', 7)]
Counter
также позволяет создать список элементов объекта счетчика.
Пример:
>>> c = Counter({'a':5, 'b':3})
>>> list(c.elements())
['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b']
Так, в зависимости от того, что вы хотите сделать с полученной Dict вы можете выбрать между Counter
и defaultdict(int)
.
Оба работают? Затем переверните монету. Тем не менее, кажется, что 'collections.Counter' есть для подсчета списка с повторяющимися элементами. – millimoose
Составьте оба варианта и посмотрите, какой из них вам больше нравится. – NPE