我是python的新手。我正在尝试写这个
if x not in d:
d[x] = {}
q = d[x]
使用三元运算符
以更紧凑的方式q = d[x] if x in d else (d[x] = {})
但这会产生语法错误。我错过了什么?
答案 0 :(得分:11)
Python中的条件运算符仅用于表达式,但赋值是语句。你可以使用
q = d.setdefault(x, {})
在这种情况下获得所需的效果。另请参阅documentation of dict.setdefault()
。
答案 1 :(得分:4)
在Python中,分配不能出现在表达式中,因此您无法编写a = (b = c)
之类的代码。
您正在寻找setdefault
:
q = d.setdefault(x, {})
替代方案,请使用defaultdict
。
答案 2 :(得分:3)
else (d[x] = {})
是语法错误的原因是在Python中,赋值是语句。但条件运算符需要表达式,虽然每个表达式都可以是一个语句,但并不是每个语句都是表达式。
答案 3 :(得分:1)
答案 4 :(得分:1)
对于那些对三元运算符感兴趣的人(也称为conditional expression),这是一种使用它来实现原始目标的一半的方法:
q = d[x] if x in d else {}
x if C else y
形式的条件表达式将根据条件x
评估并返回y
或C
的值。然后,结果将分配给q
。
答案 5 :(得分:1)
您还可以使用Python的字典get()方法
q = d.get(x, {})
说明:
如果键在字典中,则get()方法返回指定键的值。
get()的语法是:
dict.get(key[, value])
get()参数
get()方法最多使用两个参数:
键-要在字典中搜索的键
值(可选)-如果找不到密钥,则返回值。默认值为“无”。
从get()返回值
get()方法返回:
另一种选择是使用defaultdict
from collections import defaultdict
d = defaultdict(dict)
q = d[x]
>>> q
>>> {}