鱼C论坛

 找回密码
 立即注册
查看: 3305|回复: 8

[已解决]字典dict的用法

[复制链接]
发表于 2022-9-11 16:24:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
c = dict(99="吕布", 90="关羽", 60="刘备")
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

为什么错了,是因为dict无法创建从 “关键字为数字——>值” 的映射类型吗?
最佳答案
2022-9-11 18:20:51
因为菜所以卷 发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-11 16:48:01 | 显示全部楼层
本帖最后由 jackz007 于 2022-9-11 17:04 编辑
c = {"吕布":99, "关羽":90, "刘备":60}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-11 16:52:02 | 显示全部楼层
c = dict([(99,"吕布"), (90,"关羽"), (60,"刘备")])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-11 18:10:24 | 显示全部楼层

谢谢您的解答

我知道您的写法是正确的,只是我不知道为什么我的写法是错误的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-11 18:11:05 | 显示全部楼层

您误解了我的意思,我的目的就是让数字为键,字符串为值,组成的键值对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-11 18:20:26 | 显示全部楼层
    这有何难,那就调整一下呗:
c = {99:"吕布", 90:"关羽", 60:"刘备"}
    看看效果
>>> c = {99:"吕布", 90:"关羽", 60:"刘备"}
>>> c[99]
'吕布'
>>> c[90]
'关羽'
>>> c[60]
'刘备'
>>> 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-11 18:20:51 | 显示全部楼层    本楼为最佳答案   
因为菜所以卷 发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-11 18:50:18 | 显示全部楼层
你已经知道了
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无关,但是与调用的语法有关。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-12 16:42:41 | 显示全部楼层
Brick_Porter 发表于 2022-9-11 18:50
你已经知道了这行代码是正确的,这就说明Python的映射类型支持用数字作为键。

以下是详细解释:

谢谢您,解释的太清楚了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 17:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表