我正在创建一个字典对象,它是在我使用“语句 1”时创建的,但是我在尝试使用与“语句 2”相同的键和值创建字典对象时收到一条错误消息。
陈述1:
dmap = {0: 'Mon', 1: 'Tue', 2: 'Wed', 3: 'Thu',
4: 'Fri', 5: 'Sat', 6: 'Sun'}
陈述2:
dmap = dict(0='Mon', 1='Tue', 2='Wed', 3='Thu',
4='Fri', 5='Sat', 6='Sun'
错误信息:
File "<stdin>", line 1
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
有人能告诉我,为什么我可以使用语句 1 创建包含整数键的字典,而不能使用语句 2?
已编辑 使用语句 2 的更新版本,我可以使用以下代码创建字典对象:
dmap = dict(day_0='Mon', day_1='Tue', day_2='Wed',
day_3='Thu', day_4='Fri', day_5='Sat', day_6='Sun')
我遇到这个问题是因为我的字典里少了一个逗号:
item = {
'a': 1,
'b': 2
'c': 3,
'd': 4
}
注意 2 和 'c' 之间缺少的逗号
dict
是一个接受关键字参数的常规可调用对象。 根据 Python 语法,关键字参数的形式为identifier '=' expression
。 标识符不能以数字开头,这不包括数字文字。
keyword_item ::= identifier "=" expression
dict
默认情况下会创建一个接受任意键的字典,不会改变调用的语法。
你的困惑可能来自于你可以这样写:
d = dict(spam=1, eggs=2)
这使用了一个称为“关键字参数”的功能,并且仅当键是字符串时才有效。因此,您的示例不起作用,因为键是整数。
因为在语句 2 中你使用了“=”而不是“:”。你必须使用“:”。
正确的方法:
dict_obj = {'a': 1, "b": 2, "c": 3}
错误的方式:
dict_obj = {'a' = 1, "b" = 2, "c" = 3}
这就是字典的工作原理。
虽然
0:'Mon'
描述了一个键值对并被这样评估,但 0='Mon' 的评估就像您在常规代码中编写 0 = 'Mon' 一样,这将尝试将 'Mon' 分配给一个数字,不是变量,就像写 'Potato' = 'Mon' - 有点荒谬。
你可以在 dict 函数中使用整数作为键,但不是那样你可以这样做:
dmap = dict([(0 ,'Mon') ,(1, 'Tue'), (2, 'Wed'), (3, 'Thu'),(4, 'Fri'),(5 , 'Sat'), (6, 'Sun')])
Python 中的字典必须包含一个
key-value
对。
喜欢
dmap = {0:'周一',1:'周二',2:'周三',3:'周四',4:'周五',5:'周六',6:'周日'}
这里的键是
0, 1, 2, 3, 4, 5, 6
,它们各自的值是'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'
.但是在声明 2 中:
dmap = dict(0 = 'Mon', 1 = 'Tue', 2 = 'Wed', 3 = 'Thu', 4 = 'Fri', 5 = 'Sat', 6 = 'Sun')
您正在分配值。这在 python 中是不允许的。
相反,你可以这样写。
dmap = dict({0 : 'Mon', 1 : 'Tue', 2 : 'Wed', 3 : 'Thu', 4 : 'Fri', 5 : 'Sat', 6 : 'Sun'})
检查命名参数 https://treyhunner.com/2018/04/keyword-arguments-in-python/
更简单的思考方式
0 = "星期一"
x= 0
是 x = 0 还是 x = “Mon”?