Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 这一错误的根源 >x=True >>>a={1:198如果x为2:198} 文件“”,第1行 a={1:198如果x为2:198} ^ SyntaxError:无效语法_Python_Python 3.x_Dictionary_Syntax Error - Fatal编程技术网

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语法花括号可以包含(逗号分隔的键数据),然而,没有一种关键基准类型是单独支持的。我猜语言设计者并没有看到你们的构造的必要性。