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

У меня есть словарь, подобный:

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"], 
}

Как мне посчитать, сколько раз каждый конкретный c "PCP" встречается в этом объекте, и вернуть новый словарь с таким количеством:

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

Ответы [ 3 ]

4 голосов
/ 26 января 2020
import itertools
import collections
members = { ... }
PCPcounts = collections.Counter(itertools.chain.from_iterable(members.values()))

Если вы будете читать только с PCPcounts, тогда достаточно collections.Counter. Если нет, оберните его в словарь, например dict(collections.Counter(...)).

1 голос
/ 26 января 2020
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})
1 голос
/ 26 января 2020

В чистом виде 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}

...