【问题标题】:Dictionary unpacking doesn't work in one arm of a ternary expression字典解包在三元表达式的一个分支中不起作用
【发布时间】:2018-08-06 11:38:48
【问题描述】:

我想做类似以下的事情(显然是在适当的条件下,而不仅仅是 True):

a = {1:1}
print({2:2, **a if True else 1:0})

但是,它不起作用:

$ python3 test2.py 
  File "test2.py", line 2
    print({2:2, **a if True else 1:0})
                     ^
SyntaxError: invalid syntax

如果我将字典解包放在括号中也不起作用(我认为解包和三元表达式之间可能存在优先级问题):

$ python3 test2.py 
  File "test2.py", line 2
    print({2:2, (**a) if True else 1:0})
                  ^
SyntaxError: invalid syntax

最后,我不得不将解包应用到整个三元表达式,并使用临时字典作为默认值:

a = {1:1}
print({2:2, **(a if True else {1:0})})

(给出输出{2: 2, 1: 1}

为什么三元表达式不能包含字典解包?

【问题讨论】:

  • print(a if True else {1:0}) ?
  • @Rakesh 我刚刚更新了问题以说明为什么这不起作用 - 我想向字典添加其他值。

标签: python python-3.x iterable-unpacking


【解决方案1】:

试试这个语法。

a = {1:1}
a.update({2:2} if True else {1:0})
print(a)

输出:

{1: 1, 2: 2}

【讨论】:

    猜你喜欢
    • 2014-02-08
    • 2018-09-05
    • 2010-09-05
    • 2016-05-08
    • 2015-04-14
    • 2021-07-20
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    相关资源
    最近更新 更多