python三元运算符与赋值

时间:2011-10-19 09:12:45

标签: python

我是python的新手。我正在尝试写这个

if x not in d:
    d[x] = {}
q = d[x]

使用三元运算符

以更紧凑的方式
q = d[x] if x in d else (d[x] = {})

但这会产生语法错误。我错过了什么?

6 个答案:

答案 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)

这就是setdefault()的用途:

q = d.setdefault(x, {})

它完全符合您的要求:

  • 如果d[x]x
  • 中的关键字,则返回d
  • 如果{}还不是密钥,则d[x]分配给x并返回

答案 4 :(得分:1)

对于那些对三元运算符感兴趣的人(也称为conditional expression),这是一种使用它来实现原始目标的一半的方法:

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

x if C else y形式的条件表达式将根据条件x评估并返回yC的值。然后,结果将分配给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
>>> {}