带赋值的python三元运算符

带赋值的python三元运算符,python,Python,我是python新手。我正试着写这个 if x not in d: d[x] = {} q = d[x] 以更简洁的方式使用三元运算符 q = d[x] if x in d else (d[x] = {}) 但这会导致语法错误。我遗漏了什么?之所以else(d[x]={})是语法错误,是因为在Python中,赋值是语句。但是条件运算符需要表达式,虽然每个表达式都可以是语句,但并非每个语句都是表达式。Python中的条件运算符仅用于表达式,而赋值是语句。你可以用 q = d.setde

我是python新手。我正试着写这个

if x not in d:
    d[x] = {}
q = d[x]
以更简洁的方式使用三元运算符

q = d[x] if x in d else (d[x] = {})

但这会导致语法错误。我遗漏了什么?

之所以
else(d[x]={})
是语法错误,是因为在Python中,赋值是语句。但是条件运算符需要表达式,虽然每个表达式都可以是语句,但并非每个语句都是表达式。

Python中的条件运算符仅用于表达式,而赋值是语句。你可以用

q = d.setdefault(x, {})

在这种情况下,为了达到预期效果。另请参见Python中的。

,赋值不能出现在表达式中,因此不能编写类似
a=(b=c)
的代码

您正在寻找:

或者,使用。

这就是它的用途:

它正是您想要的:

  • 如果
    x
    d
    中的一个键,则返回
    d[x]
  • 如果
    x
    还不是键,则将
    {}
    分配给
    d[x]
    ,并返回该键

对于那些对三元运算符(也称为a)感兴趣的人来说,这里有一种方法可以使用它来完成原始目标的一半:


q=d[x]如果x在d else{}


条件表达式的形式为
x if C else y
,根据条件
C
计算并返回
x
y
的值。然后将结果分配给
q

您还可以使用Python的dictionary get()方法

说明:

如果键在字典中,get()方法返回指定键的值

get()的语法是:

get()参数

get()方法最多使用两个参数:

-要在字典中搜索的键

(可选)-未找到密钥时返回的值。默认值为“无”

从get()返回值

get()方法返回:

  • 如果键在字典中,则指定键的值
  • 如果找不到键且未指定值,则为“无”
  • 如果找不到键并且指定了值,则返回值
另一个选择是使用


这是个老问题。。。不幸的是,您的答案不正确-我正在寻找一种方法来返回一个空的dict,并同时将其分配给
d[x]
-这是您的代码无法做到的(请检查其他答案)。尽管如此,+1表示感谢,欢迎来到SO!谢谢你指出我的错误。我编辑了我的答案以反映其不完整性。还有,谢谢你的热情欢迎!
q = d.setdefault(x, {})
q = d.setdefault(x, {})
q = d.get(x, {})
dict.get(key[, value]) 
from collections import defaultdict

d = defaultdict(dict)
q = d[x]

>>> q
>>> {}