我有一个集合和字典以及一个值 = 5
v = s = {'a', 'b', 'c'}
d = {'b':5 //<--new value}
例如,如果字典 d 中的键 'b' 在集合 s 中,那么当我返回字典理解时我想让该值等于新值,或者如果集合 s 中的键不在字典 d 中则为 0 .所以这是我的代码,其中 s['b'] = 5 而我的新字典是 ...
{'a':0, 'b':5, 'c':0}
我写了一个dict理解
{ k:d[k] if k in d else k:0 for k in s}
^
SyntaxError: invalid syntax
为什么?!我很生气它不起作用。如果 else 在 python 中不是这样,你就是这样做的?
对不起大家。对于那些访问过这个页面的人,我最初把 { k:d[k] if k in v else k:0 for k in v} 和 s['b'] = 5 只是我创建的新字典的表示一个等于 5 的键 'b',但它不正确,因为你不能像那样迭代一个集合。
所以要重申 v 和 s 是相等的。它们只是指向量和集合。
最佳答案
您要实现的扩展形式是
a = {}
for k in v:
a[k] = d[k] if k in d else 0
其中 d[k] if k in d else 0
是 the Python's version of ternary operator .看?您需要从表达式的右侧删除 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}
你可以简洁的写成
a = {k: d.get(k, 0) for k in d}
关于python - Python 中的简单语法错误 if else 字典理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17664841/