在Python中将来自两个不同字典的值相乘

5
我有两个不同的字典,其中包含键和值,我想将它们相乘。 值应该仅由它们拥有的键相乘。
例如:
dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'a': 15, 'b': 10, 'd': 17}

dict3 = dict.items() * dict.items()
print dict3

#### #dict3 should equal 
{'a': 15, 'b': 20}

如果有人能帮忙,那就太好了。谢谢!
3个回答

16
你可以使用字典推导式:dict comprehension
>>> {k : v * dict2[k] for k, v in dict1.items() if k in dict2}
{'a': 15, 'b': 20}

或者,在Python 2.7之前版本中,可以使用与dict构造函数相结合的生成器表达式

>>> dict((k, v * dict2[k]) for k, v in dict1.items() if k in dict2)
{'a': 15, 'b': 20}

0
dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'a': 15, 'b': 10, 'd': 17}

def dict_mul(d1, d2):
    d3 = dict()
    for k in d1:
        if k in d2:
            d3[k] = d1[k] * d2[k]
    return d3

print dict_mul(dict1, dict2)

2
考虑到您使用的是print语句而不是函数,我认为您的答案适用于Python 2.x,这种情况下它是一个糟糕的答案,因为测试if k in d2.keys():将在每次外部循环中创建一个包含所有d2键的新列表。if k in d2:更值得推荐。(对于for循环也是同样的情况,但由于它只执行一次,所以并不重要) - Duncan
非常感谢,我应该更多地考虑性能。 - user1149862

0

由于我是用手机打字,所以有点难输入代码。这个应该能解决问题:

for key, value in dict1.iteritems():
    if key in dict2:
         dict3[key] = int(dict1[key]) * int(dict2[key])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接