Ответ 1
Оба 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
также позволяет вам создать список элементов из объекта Counter.
Пример:
>>> c = Counter({'a':5, 'b':3})
>>> list(c.elements())
['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b']
Итак, в зависимости от того, что вы хотите сделать с результатом dict, вы можете выбрать между Counter
и defaultdict(int)
.