#python
#python
Вопрос:
Допустим, у меня есть такой словарь:
allName = {
'name1': ['sainz', 'gasly'],
'name2': ['sainz', 'gasly', 'stroll'],
'name3': ['sainz', 'gasly', 'stroll']
}
Как я могу узнать, что внутри словаря есть 3 sainz
имени, 3 имени «gasly», 2 имени «stroll»?
Я хочу распечатать его следующим образом:
sainz: 3
gasly: 3
stroll: 2
Заранее спасибо!
Комментарии:
1. Что вы сделали для достижения того же?
2. Проверьте collections.counter docs.python.org/3/library/collections.html
Ответ №1:
самый простой способ, вероятно, счетчик коллекций плюс itertools.chain
import itertools
import collections
print(collections.Counter(itertools.chain(*data.values()))
Я думаю, сработает
Ответ №2:
Используя collections.defaultdict
Пример:
from collections import defaultdict
allName = {
'name1': ['sainz', 'gasly'],
'name2': ['sainz', 'gasly', 'stroll'],
'name3': ['sainz', 'gasly', 'stroll']
}
res = defaultdict(int)
for k, v in allName.items():
for i in v:
res[i] =1
for k, v in res.items():
print(f"{k}: {v}")
Вывод:
sainz: 3
gasly: 3
stroll: 2
Комментарии:
1. Спасибо вам! но похоже, что приведенный выше ответ короче.
Ответ №3:
Другой простой способ — использовать счетчик из коллекций
>>> from collections import Counter
>>> c = Counter()
>>> for names in allName.values():
... for name in names:
... c[name] = 1
...
>>> c
Counter({'sainz': 3, 'gasly': 3, 'stroll': 2})
>>>
объяснение :
циклы: выполните итерацию по словарю и найдите все элементы в списках.
подсчет: затем добавьте их в счетчик.