Python 这一错误的根源 >x=True >>>a={1:198如果x为2:198} 文件“”,第1行 a={1:198如果x为2:198} ^ SyntaxError:无效语法
即使添加大括号也没有帮助Python 这一错误的根源 >x=True >>>a={1:198如果x为2:198} 文件“”,第1行 a={1:198如果x为2:198} ^ SyntaxError:无效语法,python,python-3.x,dictionary,syntax-error,Python,Python 3.x,Dictionary,Syntax Error,即使添加大括号也没有帮助 >>> x = True >>> a={ 1:198 if x else 2:198} File "<stdin>", line 1 a={ 1:198 if x else 2:198} ^ SyntaxError: invalid syntax >>a={(1:198)如果x不是(2:198)} 文件“”,第1行 a={(1:198)如果x不是(2:198)
>>> x = True
>>> a={ 1:198 if x else 2:198}
File "<stdin>", line 1
a={ 1:198 if x else 2:198}
^
SyntaxError: invalid syntax
>>a={(1:198)如果x不是(2:198)}
文件“”,第1行
a={(1:198)如果x不是(2:198)}
^
SyntaxError:无效语法
您仍然可以使用带大括号的dict
>>> a={ (1:198) if x else (2:198) }
File "<stdin>", line 1
a={ (1:198) if x else (2:198) }
^
SyntaxError: invalid syntax
或
或者,对于更长的案例
{1: 198} if x else {2: 198}
你仍然可以用dict加上足够的大括号
>>> a={ (1:198) if x else (2:198) }
File "<stdin>", line 1
a={ (1:198) if x else (2:198) }
^
SyntaxError: invalid syntax
或
或者,对于更长的案例
{1: 198} if x else {2: 198}
该错误的根源是,当Python解析输入时,会出现如下情况:
d = {}
d.update({1: 198} if x else {2: 198})
这就是为什么插入符号表示冒号;它遇到一个冒号,它期望:
- 定义值的表达式的延续李>
- 逗号,表示当前键值对的结束和下一个键值对的开始;或
- 表示字典文字结尾的结束大括号
x
更改键,因此需要将三元表达式置于键位置:
{
# dictionary or set
{ 1:
# dictionary where key is 1
{ 1: 198 if x else 2
# dictionary where key is 1 and the value is either 198 or 2, depending on x
{ 1: 198 if x else 2:
# wat?
该错误的根源是,当Python解析输入时,会出现如下情况:
d = {}
d.update({1: 198} if x else {2: 198})
这就是为什么插入符号表示冒号;它遇到一个冒号,它期望:
- 定义值的表达式的延续李>
- 逗号,表示当前键值对的结束和下一个键值对的开始;或
- 表示字典文字结尾的结束大括号
x
更改键,因此需要将三元表达式置于键位置:
{
# dictionary or set
{ 1:
# dictionary where key is 1
{ 1: 198 if x else 2
# dictionary where key is 1 and the value is either 198 or 2, depending on x
{ 1: 198 if x else 2:
# wat?
如果您只想更改键,
{1 If x else 2:198}
可以工作,但这似乎不是一种特别惯用的方法。您不能这样做,dict
文本被定义为'{',expr',:',expr'}
。如果您只想更改键,{1 If x else 2:198}
可以工作,但这似乎不是一种特别惯用的方法。你不能这样做,dict
literal被定义为'{',expr',:',expr'}'
。谢谢你的解释。不,我简化了这个例子是为了问目的,我的关键,价值都取决于这些条件,有没有其他的方法来实现这一点?那么括号中的错误呢。@v78那么,如果x else{2:'not 198'}的话,那么执行例如a={1:198}不是更容易吗?你能举一个更具代表性的例子来说明你真正想解决的问题吗?@v78关于括号不起作用的原因,冒号在这一点上也是无效的。key:value
语法仅在{}
中立即起作用,您不能将其视为可以在该位置移动的值(例如,您不会分配一对x=1:2
),谢谢您的解释。不,我简化了这个例子是为了问目的,我的关键,价值都取决于这些条件,有没有其他的方法来实现这一点?那么括号中的错误呢。@v78那么,如果x else{2:'not 198'}
的话,那么执行例如a={1:198}不是更容易吗?你能举一个更具代表性的例子来说明你真正想解决的问题吗?@v78关于括号不起作用的原因,冒号在这一点上也是无效的。key:value
语法仅在{}
中立即起作用,您不能将其视为可以在该位置移动的值(例如,您不会分配一对x=1:2
),但是,这并没有回答我的问题。AChampion的评论对此进行了解释:花括号表示法需要用分号分隔的表达式列表。请参见Python语法。花括号可以包含(逗号分隔的键数据),但它本身不支持任何键数据类型。我猜语言设计者没有看到您的构造的必要性。但是,这并没有回答我的问题。这在AChampion的评论中得到了解释:花括号表示法需要用分号分隔的表达式列表也请参见Python语法花括号可以包含(逗号分隔的键数据),然而,没有一种关键基准类型是单独支持的。我猜语言设计者并没有看到你们的构造的必要性。