计算值在列表字典中出现的次数,其中键是出现的次数

时间:2020-05-08 18:51:33

标签: python dictionary dictionary-comprehension

我想知道列表中的每个项目在列表字典中出现了多少次。键是每个值的出现次数,该值可以跨多个键出现。

所以

{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

以此类推。

我正在尝试解决this problem,因此我决定将所有内容编入字典:

        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 个答案:

答案 0 :(得分:1)

您可以将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})