将两个字典中的值相乘,但一个字典中不存在一对键和值

时间:2018-05-24 23:29:51

标签: python dictionary

我有以下需要繁殖的词典:

dict1 = {'fred': 2, 'andrew': 2, 'judy': 1, 'george': 1}
dict2 = {'andrew': 4, 'fred': 2, 'judy': 2, 'george': 1, 'john': 1}

我正在使用

count = {k: dict1[k]*dict2[k] for k in dict1}

它给了我输出:

{'fred': 4, 'andrew': 8, 'judy': 2, 'george': 1}

因为john不包含在dict1中,但我需要' john'有价值' 0',有可能吗?

我怎样才能成为:

count = {'fred': 4, 'andrew': 8, 'judy': 2, 'george': 1, 'john': 0}

2 个答案:

答案 0 :(得分:4)

使用dict.get和字典键的并集:

count = {k: dict1.get(k, 0) * dict2.get(k, 0) for k in dict1.keys() | dict2.keys()}

dict.get允许使用可选的默认参数,如果在词典中找不到该键,则使用该参数。

字典键的视图允许set - 类似操作,因此我们可以使用|来指示两个字典中键之间的联合。

答案 1 :(得分:1)

这是一个单行代码:

dict1 = {'fred': 2, 'andrew': 2, 'judy': 1, 'george': 1}
dict2 = {'andrew': 4, 'fred': 2, 'judy': 2, 'george': 1, 'john': 1}

# old code
print({k: dict1[k]*dict2[k] for k in dict1})
{'andrew': 8, 'george': 1, 'judy': 2, 'fred': 4}

# new code with if-else inside dictionary comprehension
print({k: dict1[k]*dict2[k] if k in dict1.keys() and dict2.keys() else 0 for k in dict2})
# output
{'john': 0, 'andrew': 8, 'george': 1, 'judy': 2, 'fred': 4}