【发布时间】:2011-10-19 09:12:45
【问题描述】:
我是 python 新手。我正在尝试写这个
if x not in d:
d[x] = {}
q = d[x]
以更紧凑的方式使用三元运算符
q = d[x] if x in d else (d[x] = {})
但这会产生语法错误。我错过了什么?
【问题讨论】:
标签: python
我是 python 新手。我正在尝试写这个
if x not in d:
d[x] = {}
q = d[x]
以更紧凑的方式使用三元运算符
q = d[x] if x in d else (d[x] = {})
但这会产生语法错误。我错过了什么?
【问题讨论】:
标签: python
Python 中的条件运算符仅用于表达式,但赋值是语句。你可以使用
q = d.setdefault(x, {})
在这种情况下获得所需的效果。另请参阅documentation of dict.setdefault()。
【讨论】:
在 Python 中,赋值不能出现在表达式中,因此你不能编写像 a = (b = c) 这样的代码。
你正在寻找setdefault:
q = d.setdefault(x, {})
或者,使用defaultdict。
【讨论】:
else (d[x] = {}) 是语法错误的原因是在 Python 中,赋值是一个语句。但是条件运算符需要表达式,虽然每个表达式都可以是一个语句,但并不是每个语句都是一个表达式。
【讨论】:
你也可以使用 Python 的字典 get() 方法
q = d.get(x, {})
说明:
如果键在字典中,get() 方法返回指定键的值。
get()的语法是:
dict.get(key[, value])
get() 参数
get() 方法最多接受两个参数:
key - 要在字典中搜索的键
value(可选)- 如果找不到键,则返回值。默认值为无。
get() 的返回值
get() 方法返回:
另一种选择是使用defaultdict
from collections import defaultdict
d = defaultdict(dict)
q = d[x]
>>> q
>>> {}
【讨论】:
这就是setdefault() 的用途:
q = d.setdefault(x, {})
它完全符合你的要求:
x 是d 中的一个键,则返回d[x]
x 还不是密钥,则将 {} 分配给 d[x] 并返回该密钥【讨论】:
对于那些对三元运算符(也称为conditional expression)感兴趣的人,这里有一种方法可以使用它来完成一半的原始目标:
q = d[x] if x in d else {}
x if C else y 形式的条件表达式将根据条件C 计算并返回x 或y 的值。然后将结果分配给q。
【讨论】:
d[x] -您的代码没有做的事情(请检查其他答案)。尽管如此,为您的努力 +1,欢迎来到 SO!