Python中的简单语法错误,否则dict理解

Leo*_*eon 1 python list-comprehension python-3.x

我有一个集合和字典,值= 5

v = s = {'a', 'b', 'c'}
d = {'b':5 //<--new value}
Run Code Online (Sandbox Code Playgroud)

例如,如果字典d中的键'b'在set s中,那么我想在返回字典理解时使该值等于新值,或者如果set s中的键不在字典d中则使该值等于0.所以这是我的代码,在s ['b'] = 5并且我的新词典是...

{'a':0, 'b':5, 'c':0}
Run Code Online (Sandbox Code Playgroud)

我写了一个字典理解

{  k:d[k] if k in d else k:0 for k in s}
                          ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

为什么?!我很生气它不起作用.你是怎么做的如果在python中不是吗?

大家好抱歉.对于那些访问过这个页面的人,我最初放了{k:d [k]如果k in v else k:0 for k in v}而s ['b'] = 5只是表示我创建的新词典会有键'b'等于5,但它不正确你不能迭代这样的集合.

所以重申v和s是平等的.它们只是指向量和集合.

vau*_*tah 11

你想要实现的扩展形式是

a = {}
for k in v:
    a[k] = d[k] if k in d else 0
Run Code Online (Sandbox Code Playgroud)

这里d[k] if k in d else 0在Python的版本三元运算符.看到?您需要k:从表达式的右侧部分删除:

{k: d[k] if k in d else 0 for k in v} # ? {k: (d[k] if k in d else 0) for k in v}
Run Code Online (Sandbox Code Playgroud)

你可以简洁地写出来

a = {k: d.get(k, 0) for k in d}
Run Code Online (Sandbox Code Playgroud)