字典dict的用法
c = dict(99="吕布", 90="关羽", 60="刘备")SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
为什么错了,是因为dict无法创建从 “关键字为数字——>值” 的映射类型吗? 本帖最后由 jackz007 于 2022-9-11 17:04 编辑
c = {"吕布":99, "关羽":90, "刘备":60} c = dict([(99,"吕布"), (90,"关羽"), (60,"刘备")]) 青出于蓝 发表于 2022-9-11 16:52
谢谢您的解答
我知道您的写法是正确的,只是我不知道为什么我的写法是错误的 jackz007 发表于 2022-9-11 16:48
您误解了我的意思,我的目的就是让数字为键,字符串为值,组成的键值对 这有何难,那就调整一下呗:
c = {99:"吕布", 90:"关羽", 60:"刘备"}
看看效果
>>> c = {99:"吕布", 90:"关羽", 60:"刘备"}
>>> c
'吕布'
>>> c
'关羽'
>>> c
'刘备'
>>> 因为菜所以卷 发表于 2022-9-11 18:11
您误解了我的意思,我的目的就是让数字为键,字符串为值,组成的键值对
因为dict(99="吕布", 90="关羽", 60="刘备") 这种方式创建字典实际上是<变量名=变量值>的方式创建字典,但是Python中变量不能以数字开头,所以报错了。
可以用以下方法:
a = dict({99:"吕布", 90: "关羽"})
print(a)
b = dict([(99, "吕布"), (90,"关羽")])
print(b)
c = {99:"吕布", 90: "关羽"}
print(c) 你已经知道了c = {"吕布":99, "关羽":90, "刘备":60}这行代码是正确的,这就说明Python的映射类型支持用数字作为键。
以下是详细解释:
先来看Python抛出的错误类型,SyntaxError,也就是语法错误。具体错误在于把数字当作了参数名。
Python规定,调用函数或者调用类只有两种传递参数的方式,假设有如下函数def fn(a, b, c):
# 打印参数a、b、c的值
print('a = {}, b = {}, c = {}'.format(a, b, c))
先来看第一种方式,按照从左往右的位置关系依次传值:fn(11, 233, 666)直接把三个值11、233、666按照从左往右的位置关系依次传递给参数a、参数b、参数c。所以,最后的输出为a = 11, b = 233, c = 666。这种按照位置传递的参数叫做位置参数。
再来看第二种方式,通过等号直接给指定的参数传值:fn(c=666, a=11, b=233)可以看到我们使用等号给指定的参数传值。如此一来即便这次调用函数时参数的顺序发生了改变结果也是一样的,输出还是a = 11, b = 233, c = 666。这种通过等号给指定参数传值的方式叫做关键字参数。
以上就是Python允许的两种调用类或者函数的语法。再来看你的错误,99=“吕布",这句话的意思是把字符串吕布传给99,但是99本身也是一个有效的值不是参数名,所以引发了语法错误。
从另外一个角度来看,上面的例子中我们之所以可以写成a=11这样的形式是因为 我们定义函数时就存在名为a的参数,可是无论如何我们都不能用真实的值当作参数名,例如我们不能把99当作参数名来使用。既然定义的时候都没有名为99的参数,那么99="吕布"这种形式就更错误了。
最后的补充:
1. 位置参数与关键字参数都是针对调用函数或者类时的语法;
2. 以上介绍的两种调用形式可以混合使用,但是位置参数必须靠前,例如fn(11, c= 666, b=233),这是因为11没有指定给哪个参数,如果不放到前面会导致解释器不知道这个值是给哪个参数的从而引发错误。
以上就是所有解释,与dict无关,但是与调用的语法有关。 Brick_Porter 发表于 2022-9-11 18:50
你已经知道了这行代码是正确的,这就说明Python的映射类型支持用数字作为键。
以下是详细解释:
谢谢您,解释的太清楚了
页:
[1]