在字典理解中使用 else

Lui*_*uez 1 python dictionary list-comprehension

来自两本词典:

d1 = {a:a for a in 'abcdefg'}
d2 = {n:n for n in range(10)}
Run Code Online (Sandbox Code Playgroud)

我怎样才能创建第三个,例如:

new_dict = {k:d1[k] if k in d1.keys() else k:d2[k]  for k in 'abc123' }
Run Code Online (Sandbox Code Playgroud)

它抛出语法错误,但使用列表理解似乎没问题:

[a if a else 2 for a in [0,1,0,3]]
out[]: [2, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

此外,为什么这有效:

{k:d1[k]  for k in 'abc123' if k in d1.keys() }
Run Code Online (Sandbox Code Playgroud)

这不是:

{k:d1[k] if k in d1.keys() for k in 'abc123' }
Run Code Online (Sandbox Code Playgroud)

Mos*_*oye 7

您不能像这样在三元条件部分中使用键值对。else

改为这样做:

new_dict = {k: d1[k] if k in d1 else d2[int(k)]  for k in 'abc123'}
#                                    ^^<- make value d2[int(k)] on else
print(new_dict)
#{'2': 2, '1': 1, 'b': 'b', 'a': 'a', 'c': 'c', '3': 3}
Run Code Online (Sandbox Code Playgroud)

请注意,if k in d1检查是否k是字典中的键d1。无需调用该keys方法。