как посчитать элемент внутри списков словаря в python?

#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})
>>>
  

объяснение :
циклы: выполните итерацию по словарю и найдите все элементы в списках.
подсчет: затем добавьте их в счетчик.