为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守候你守候我 2021-11-09 17:03:30
我正在尝试从嵌套字典中提取值的总和,并将键名保留为新字典。我一直在尝试从这里研究的各种方法,但下面是我得到的最接近的方法。源字典: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 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

您可以使用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}}



查看完整回答
反对 回复 2021-11-09
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您可以使用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}}



查看完整回答
反对 回复 2021-11-09
  • 2 回答
  • 0 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信