подсчитать количество раз, когда значение встречается в словаре списков, где ключи - это количество вхождений - PullRequest
0 голосов
/ 08 мая 2020

Я хотел бы знать, сколько раз каждый элемент в списке встречается в словаре списков. Ключи - это количество вхождений каждого значения, и значение может встречаться в нескольких ключах.

Итак,

{1: ['intel', 'mail', 'com'], 50: ['yahoo', 'com'], 900: ['google', 'mail', 'com'], 5: ['wiki', 'org']}

Будет содержать

  • 1 + 50 + 900 + 5 com значений, всего 956 com значений в словаре,
  • 1 + 900 mail.com значения
  • 1 intel.mail.com значение
  • 5 wiki.org значения

и т. Д.

Я пытаюсь решить эту проблему , и я решил все сделать в словаре :

        cpdomains = ["900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"]
        
        split_number = [x.split(' ') for x in cpdomains]
        
        domain = {int(x[0]): x[1].split('.') for x in split_number}

дал мне этот словарь.

1 Ответ

1 голос
/ 09 мая 2020

Вы можете использовать объект Counter (из коллекции) с reduce (из functools) для накопления всех подсчетов слов в большом словаре Counter с итогами:

from collections import Counter
from functools import reduce


countWords = {1: ['intel', 'mail', 'com'], 
             50: ['yahoo', 'com'], 
            900: ['google', 'mail', 'com'], 
              5: ['wiki', 'org']}

toCounter  = lambda cw: Counter({w:cw[0] for w in cw[1]})
wordCounts = reduce(Counter.__add__, map(toCounter,countWords.items()) )

print(wordCounts)

Counter({'com': 951, 'mail': 901, 'google': 900, 
       'yahoo': 50,  'wiki': 5,      'org': 5, 'intel': 1})
...