我想将字典和嵌套字典的值相乘。一个的按键与另一个的按键稍有相似,应该会有所帮助。
dict1 = {'a' :{'irrelevant': 1}, 'b' :{'cat': 2}, 'c': {'train': 3}}
dict2 = {'a2' : 4, 'b2' : 5, 'd2': 10}
multiplied_values = []
for key, value in dict1:
for k, v in value:
for key2, value2 in dict2:
if key == str(key2.split('2')[0]):
multiplied_values.append(v*value2)
print(multiplied_values)
我想得到一个[4,10]的清单 相反,我收到以下错误消息:
for key, value in dict1:
ValueError: not enough values to unpack (expected 2, got 1)
答案 0 :(得分:3)
似乎您要为每个字典运行的循环未正确遍历键和值。您可以使用.items()
完成此操作。这将带给您一组可以迭代的(键,值)对。
dict1 = {'a' :{'irrelevant': 1}, 'b' :{'cat': 2}, 'c': {'train': 3}}
dict2 = {'a2' : 4, 'b2' : 5, 'd2': 10}
multiplied_values = []
for key, value in dict1.items():
for k, v in value.items():
for key2, value2 in dict2.items():
if key == str(key2.split('2')[0]):
multiplied_values.append(v*value2)
print(multiplied_values)
如果您仍然遇到困难,请查看this link,以获取更多信息。
答案 1 :(得分:1)
除了在字典上使用items()
外,您还可以完全删除最里面的循环:
dict1 = {'a' :{'irrelevant': 1}, 'b' :{'cat': 2}, 'c': {'train': 3}}
dict2 = {'a2' : 4, 'b2' : 5, 'd2': 10}
multiplied_values = []
for key, value in dict1.items():
for k, v in value.items():
product = v * dict2[key + '2']
multiplied_values.append(product)
print(multiplied_values)
由于您正在dict2
中寻找特定的密钥,并且可以根据dict1
中的密钥来构建该密钥,因此您无需遍历dict2
中的所有密钥
答案 2 :(得分:0)
此版本使用列表推导。第一步,我们“展平”字典dict
以删除内部字典。第二步是结合使用dict2
和扁平化的字典来制作最终产品:
dict1 = {'a' :{'irrelevant': 1}, 'b' :{'cat': 2}, 'c': {'train': 3}}
dict2 = {'a2' : 4, 'b2' : 5, 'd2': 10}
k1 = dict((k+'2', *[*v.values()]) for k, v in dict1.items()) # {'a2': 1, 'b2': 2, 'c2': 3}
print([v*dict2[k] for k, v in k1.items() if k in dict2])
打印:
[4, 10]