首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python if else字典理解中的简单语法错误

Python if else字典理解中的简单语法错误
EN

Stack Overflow用户
提问于 2013-07-16 06:14:31
回答 4查看 4.8K关注 0票数 1

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

代码语言:javascript
运行
复制
v = s = {'a', 'b', 'c'}
d = {'b':5 //<--new value}

例如,如果字典d中的键'b‘在集合s中,那么当我返回字典理解时,我希望使该值等于新值,或者如果集合s中的键不在字典d中,则使该值等于0。因此,这是我的代码,其中s'b’=5,而我的新字典是……

代码语言:javascript
运行
复制
{'a':0, 'b':5, 'c':0}

我写了一个字典理解

代码语言:javascript
运行
复制
{  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是相等的。它们只表示向量和集合。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-16 06:23:19

您尝试实现的扩展形式是

代码语言:javascript
运行
复制
a = {}
for k in v:
    a[k] = d[k] if k in d else 0

其中d[k] if k in d else 0the Python's version of ternary operator。看见?您需要从表达式的右侧删除k:

代码语言:javascript
运行
复制
{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}

你可以简明扼要地写成

代码语言:javascript
运行
复制
a = {k: d.get(k, 0) for k in d}
票数 11
EN

Stack Overflow用户

发布于 2013-07-16 06:21:11

代码语言:javascript
运行
复制
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}
票数 3
EN

Stack Overflow用户

发布于 2013-07-16 06:23:53

这应该可以解决您的问题:

代码语言:javascript
运行
复制
>>> dict((k, d.get(k, 0)) for k in s)
{'a': 0, 'c': 0, 'b': 5}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17664841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档