我有一个像这样的字典
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
}
答案 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})