我有以下需要繁殖的词典:
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}
答案 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}