#我现在有一个一键对多值的字典1和一个包含相同键的且值为数字的字典2
dict1 = {a:[aa,bb],b:[bb,hh],c:[ee,hh,nn]}
dict2 = {a:2,b:3}
#已整理出字典1值列表
dic1_values = [aa,bb,hh,ee,nn]
#需要计算字典1中所出现值对应键在字典2中对应的值之和,输出结果参考如:{aa:2,bb:5,hh:3,ee:0,nn:0}
#目前是想遍历字典1,映射到值列表,代入字典2的值进行计算,但涉及到多个值的问题……已经想了一整天,还是一筹莫展,求拯救
#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author: Roc-xb
"""
if __name__ == '__main__':
dict1 = {'a': ['aa', 'bb'], 'b': ['bb', 'hh'], 'c': ['ee', 'hh', 'nn']}
dict2 = {'a': 2, 'b': 3}
# 期望结果:{aa:2,bb:5,hh:3,ee:0,nn:0}
new_dict = {}
for dict1_key in dict1.keys():
value = 0 if not dict2.get(dict1_key) else dict2.get(dict1_key)
dict1_value = dict1[dict1_key]
for item in dict1_value:
if item in new_dict.keys():
new_dict[item] = new_dict[item] + value
else:
new_dict[item] = value
print(new_dict)
dict1 = {'a':['aa','bb'],'b':['bb','hh'],'c':['ee','hh','nn']}
dict2 = {'a':2,'b':3, 'c': 1,}
#已整理出字典1值列表
dic1_values = ['aa','bb','hh','ee','nn']
d_result = dict.fromkeys(dic1_values, 0)
for k,v in d_result.items():
for k1, v1 in dict1.items():
if k in v1 : d_result[k] += dict2.get(k1, 0)
print(d_result)
给个思路,就是先把dict1里的value里的数组转为一维数组,然后用set去重,整理出dic1_values = [aa,bb,hh,ee,nn]然后遍历dict1,计算包含dic1_values 的key值的项,查询对应key以及在dict2中的value求和就行,给个一行推导式解决方案,仅供参考:
dict1 = {'a': ['aa', 'bb'], 'b': ['bb', 'hh'], 'c': ['ee', 'hh', 'nn']}
dict2 = {'a': 2, 'b': 3}
dict3 = {key:sum([dict2[k] for k,v in dict1.items() if key in v and k in dict2.keys()]) for key in set(sum(dict1.values(),[]))}
print(dict3)