计算每个项目在字典中出现的次数

时间:2020-01-26 01:19:51

标签: python dictionary

我有一个像这样的字典

members = {
"member1" : ["PCP2", "PCP3"],
"member2" : ["PCP1", "PCP2"],
"member3" : ["PCP3"],
"member4" : ["PCP1"],
"member5" : ["PCP4", "PCP5"],
"member6" : ["PCP1", "PCP5"],
"member6" : ["PCP2", "PCP3", "PCP4"],
"member7" : ["PCP3", "PCP5"],
"member8" : ["PCP1", "PCP4", "PCP5"],
"member9" : ["PCP2", "PCP4"],
"member10" : ["PCP2"],
"member11" : ["PCP3"],
"member12" : ["PCP4", "PCP5"], 
}

如何计算每个特定“ PCP”在此对象中出现的次数,并返回一个新的字典,其计数如下:

PCPcounts = {
"PCP1" : 4,
"PCP2" : 5,
"PCP3" : 5,
"PCP4" : 5,
"PCP5" : 5
}

3 个答案:

答案 0 :(得分:4)

import itertools
import collections
members = { ... }
PCPcounts = collections.Counter(itertools.chain.from_iterable(members.values()))

如果您仅从PCPcounts中读取内容,那么collections.Counter就足够了。如果没有,则将其包装在字典中,例如dict(collections.Counter(...))

答案 1 :(得分:1)

在纯python中,如下所示:

members = {
"member1" : ["PCP2", "PCP3"],
"member2" : ["PCP1", "PCP2"],
"member3" : ["PCP3"],
"member4" : ["PCP1"],
"member5" : ["PCP4", "PCP5"],
"member6" : ["PCP1", "PCP5"],
"member6" : ["PCP2", "PCP3", "PCP4"],
"member7" : ["PCP3", "PCP5"],
"member8" : ["PCP1", "PCP4", "PCP5"],
"member9" : ["PCP2", "PCP4"],
"member10" : ["PCP2"],
"member11" : ["PCP3"],
"member12" : ["PCP4", "PCP5"],
}
PCPcounts = {}
for m in members.values():
    for v in m:
        if v in PCPcounts:
            PCPcounts[v] += 1
        else:
            PCPcounts[v] = 1
print(PCPcounts)

输出:

{'PCP2':5,'PCP3':5,'PCP1':3,'PCP4':5,'PCP5':4}

答案 2 :(得分:1)

In [1]: from collections import defaultdict

In [2]: PCPcounts = defaultdict(int)

In [3]: members = {
   ...: "member1" : ["PCP2", "PCP3"],
   ...: "member2" : ["PCP1", "PCP2"],
   ...: "member3" : ["PCP3"],
   ...: "member4" : ["PCP1"],
   ...: "member5" : ["PCP4", "PCP5"],
   ...: "member6" : ["PCP1", "PCP5"],
   ...: "member6" : ["PCP2", "PCP3", "PCP4"],
   ...: "member7" : ["PCP3", "PCP5"],
   ...: "member8" : ["PCP1", "PCP4", "PCP5"],
   ...: "member9" : ["PCP2", "PCP4"],
   ...: "member10" : ["PCP2"],
   ...: "member11" : ["PCP3"],
   ...: "member12" : ["PCP4", "PCP5"],
   ...: }


In [4]: for k, v in members.items():
   ...:     for vv in v:
   ...:         PCPcounts[vv] += 1
   ...:

In [5]: PCPcounts
Out[5]: defaultdict(int, {'PCP2': 5, 'PCP3': 5, 'PCP1': 3, 'PCP4': 5, 'PCP5': 4})
相关问题