我有一个集合和字典,值=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}
我写了一个字典理解
{ k:d[k] if k in d else k:0 for k in s}
^
SyntaxError: invalid syntax
为什么?!我太生气了,它不起作用。这就是你在python中如何做的,不是吗??
很抱歉大家。对于访问此页面的人,我最初将{ k:dk if v else k:0 For k in v}和s'b‘= 5只是表示我创建的新字典将有一个等于5的键'b’,但它是不正确的,因为你不能迭代这样的集合。
所以重申v和s是相等的。它们只表示向量和集合。
发布于 2013-07-16 06:23:19
您尝试实现的扩展形式是
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}
发布于 2013-07-16 06:21:11
In [82]: s = {'a', 'b', 'c'}
In [83]: d = {'b':5 }
In [85]: {key: d.get(key, 0) for key in s}
Out[85]: {'a': 0, 'b': 5, 'c': 0}
发布于 2013-07-16 06:23:53
这应该可以解决您的问题:
>>> dict((k, d.get(k, 0)) for k in s)
{'a': 0, 'c': 0, 'b': 5}
https://stackoverflow.com/questions/17664841
复制相似问题