Могу ли я сделать это, используя словарь?
Вы можете использовать collections.Counter
, который является подклассом dict
для подсчета хеш-объектов:
>>> from collections import Counter
>>> scores = [['win', 'lose', 'win'], ['win', 'win'], ['draw', 'win'], ['lose']]
>>> counts = [Counter(score) for score in scores]
>>> counts
[Counter({'win': 2, 'lose': 1}), Counter({'win': 2}), Counter({'draw': 1, 'win': 1}), Counter({'lose': 1})]
Чтобы добавить ноль отсчетов для отсутствующих ключей, вы можете использовать дополнительный цикл:
>>> for c in counts:
... for k in ('win', 'lose', 'draw'):
... c[k] = c.get(k, 0)
...
>>> counts
[Counter({'win': 2, 'lose': 1, 'draw': 0}), Counter({'win': 2, 'lose': 0, 'draw': 0}), Counter({'draw': 1, 'win': 1, 'lose': 0}), Counter({'lose': 1, 'win': 0, 'draw': 0})]
Кроме того, вы можете обернуть счетчики с помощью collections.defaultdict
:
>>> counts = [defaultdict(int, Counter(score)) for score in scores]
>>> counts
[defaultdict(<class 'int'>, {'win': 2, 'lose': 1}), defaultdict(<class 'int'>, {'win': 2}), defaultdict(<class 'int'>, {'draw': 1, 'win': 1}), defaultdict(<class 'int'>, {'lose': 1})]
>>> counts[0]['draw']
0