猿问

从嵌套字典中提取值出现的次数

我正在尝试从嵌套字典中提取值的总和,并将键名保留为新字典。


我一直在尝试从这里研究的各种方法,但下面是我得到的最接近的方法。


源字典:


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

       ....

{

可能很简单,但在这里没有成功。谢谢!


守候你守候我
浏览 192回答 2
2回答

九州编程

您可以使用dict.setdefault:result = {}for d in result_data.values():    for k, v in d.items():        result[k][v] = result.setdefault(k, {}).get(v, 0) + 1result 变成:{'GET': {'GREEN': 2}, 'POST': {'GREEN': 2}, 'Query': {'GREEN': 1, 'RED': 1}, 'Cookie': {'RED': 2}, 'String': {'RED': 2}, 'Body': {'BLUE': 2}}

杨__羊羊

您可以使用collections.defaultdict:from collections import Counter, defaultdictd = {'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}}
随时随地看视频慕课网APP

相关分类

Python
我要回答