如何将两个不同字典中的值相乘

时间:2019-07-12 20:48:13

标签: python python-3.x dictionary

我想将字典和嵌套字典的值相乘。一个的按键与另一个的按键稍有相似,应该会有所帮助。

     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)

3 个答案:

答案 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]