Счетчик слов для вложенного словаря и списка - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть словарь, который выглядит следующим образом:

d = {'name1': {'details': ['something',
   'another thing',],
  'groups': ['first', 'second'],
 },
'name2': {'details': ['other details'],
  'groups': ['first', 'third'],
 }}

И список, который выглядит следующим образом:

groups = ['first', 'second', 'third']

Я хотел бы посчитать, сколько раз упоминается каждая группа и получить следующий вывод:

counted = {'first': 2, 'second':1, third:1}

Я пробовал циклы, но получаю различные ошибки.

Ответы [ 3 ]

4 голосов
/ 28 февраля 2020

Это должно сделать

import itertools
from collections import Counter
Counter(itertools.chain.from_iterable([x['groups'] for x in d.values()]))

Вывод

Counter({'first': 2, 'second': 1, 'third': 1})
2 голосов
/ 28 февраля 2020

Вы можете сделать это с помощью list comprehension:

from collections import Counter
print(Counter([i for v in d.values() for i in v["groups"]]))
# Counter({'first': 2, 'second': 1, 'third': 1})
0 голосов
/ 28 февраля 2020

Попробуйте это:

        d = {'name1': {'details': ['something',
   'another thing',],
  'groups': ['first', 'second'],
 },
'name2': {'details': ['other details'],
  'groups': ['first', 'third'],
 }}

counted = {}
for names in d.keys():
    for elements in d[names]["groups"]:
        if elements not in counted.keys():
            counted[elements] = 1
        else:
            counted[elements] += 1

print(counted)
...