Извлечение количества вхождений значений из вложенного словаря - PullRequest
0 голосов
/ 15 февраля 2019

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

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

Исходный словарь:

result_data=

{
   "uhawjjh4": {
     "GET": "GREEN",
     "POST": "GREEN",
     "Query": "GREEN",
     "Cookie": "RED",
     "String": "RED",
     "Body": "BLUE"
   },
   "bcfp19sg": {
     "GET": "GREEN",
     "POST": "GREEN",
     "Query": "RED",
     "Cookie": "RED",
     "String": "RED",
     "Body": "BLUE"
   }
 }

Код:

    result_data_global = Counter()
    for data in result_data.values():
        result_data_global += Counter(data.keys())

Результат:



  {
    "GREEN": 5,
    "RED": 5,
    "BLUE": 2,
  }


Мне нужен ключ и значение ситого:

{
      "GET": {"GREEN": 2},
      "POST": {"GREEN": 2},
      "Query": {"GREEN": 1, “RED”: 1},
       ....
{

Возможно, все просто, но не имеет успеха.Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Вы можете использовать dict.setdefault:

result = {}
for d in result_data.values():
    for k, v in d.items():
        result[k][v] = result.setdefault(k, {}).get(v, 0) + 1

result становится:

{'GET': {'GREEN': 2}, 'POST': {'GREEN': 2}, 'Query': {'GREEN': 1, 'RED': 1}, 'Cookie': {'RED': 2}, 'String': {'RED': 2}, 'Body': {'BLUE': 2}}
0 голосов
/ 15 февраля 2019

Вы можете использовать collections.defaultdict:

from collections import Counter, defaultdict
d = {'uhawjjh4': {'GET': 'GREEN', 'POST': 'GREEN', 'Query': 'GREEN', 'Cookie': 'RED', 'String': 'RED', 'Body': 'BLUE'}, 'bcfp19sg': {'GET': 'GREEN', 'POST': 'GREEN', 'Query': 'RED', 'Cookie': 'RED', 'String': 'RED', 'Body': 'BLUE'}}
new_d = defaultdict(list)
result = [i for b in d.values() for i in b.items()]
for a, b in result:
  new_d[a].append(b)

new_result = {a:dict(Counter(b)) for a, b in new_d.items()}

Выход:

{'GET': {'GREEN': 2}, 'POST': {'GREEN': 2}, 'Query': {'GREEN': 1, 'RED': 1}, 'Cookie': {'RED': 2}, 'String': {'RED': 2}, 'Body': {'BLUE': 2}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...