鱼C论坛

 找回密码
 立即注册
查看: 1471|回复: 11

[已解决]我花了2个小时才总结明白我的疑问,字典部分.

[复制链接]
发表于 2021-1-29 06:27:13 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 fazerse 于 2021-1-29 06:28 编辑

前辈们好, 我又来提问了.   做课后题时,发现了 在创设 ,使用 字典时的 一些疑问
上代码运行结果:
sample={a:'1',2:'b'}
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    sample={a:'1',2:'b'}
NameError: name 'a' is not defined

然后,
sample ={'a':'1',2:'b'}   又可以,   
那么说明  key  必须要 文本格式吗?  可是这里  2  作为KEY  又可以  ?

同样的方式 到  dict() 工厂函数


sampleSE=dict(a=1,'b'=2)
SyntaxError: keyword can't be an expression
>>> sampleSE=dict(a=1,2='b')
SyntaxError: keyword can't be an expression
>>> sampleSE=dict(a='1',2='b')
SyntaxError: keyword can't be an expression
以上都不行只有
>>> sampleSE=dict(a='1',b='2')   才可以
返回{'b': '2', 'a': '1'}
然后sampleSE=dict(a=1,b=2)
则返回了   
{'b': 2, 'a': 1}   

这里  key   都 是文本格式.   value  可以是  文本,也可以是整数

再来,
sampleTR=dict (1='a',2=b)
SyntaxError: keyword can't be an expression
>>> sampleTR=dict(1=a,2=b)
SyntaxError: keyword can't be an expression
>>> sampleTR=dict('1'=a,'2'=b)
SyntaxError: keyword can't be an expression
>>> sampleTR=dict('a'=1,'b'=2)
SyntaxError: keyword can't be an expression

这时   key   值  整数也不行, 文本也不行.  

总结我的问题就是  不同方法创设字典时,   key  ,value    的数据类型具体是什么规范规则.

请高手作答.
最佳答案
2021-1-29 21:44:56
如果你非要用 dict(**kwargs)的方式的话起码你的表达式得符合表达式的规则
表达式不允许 1 = 2 的形式自然就不能被python认同
同理 1 = "a" 也不允许
a = b 即使 b 没有定义的情况也不允许
表达式左边会是 key ,右边就是 value
如果你非得想要 通过 dict()来创建数字作为键值,不妨换一种方式
>>> listDict = [[1,2],[3,4]]
>>> dict(listDict)
{1: 2, 3: 4}

你可以 help(dict)来自己查看dict的用法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-29 08:06:44 | 显示全部楼层

回帖奖励 +5 鱼币

顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-29 08:36:38 | 显示全部楼层

回帖奖励 +5 鱼币

1.不能是未定义的变量,你随便用的abcd被python默认为未定义的变量,在python中无法识别
2.不能是 列表 字典 等 这种不可哈希的对象  不可哈希简单理解就是创建后依然可以变动和修改的对象,例如list可以 list.append 结果字典中的key值就变了,索引不到,当然就不可以,
简而言之,键值必须是不可变的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-1-29 09:02:23 | 显示全部楼层

回帖奖励 +5 鱼币

看三楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-29 09:08:02 | 显示全部楼层

回帖奖励 +5 鱼币

新建字典时键必须是字符串、整形,键值必须唯一并且不可变
但是通过dict()工厂函数新建字典时会默认表达式等号左边是字符串,你要是加上了引号反而会报错不能是赋值表达式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-1-29 09:32:26 | 显示全部楼层

回帖奖励 +5 鱼币

帮顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-29 14:22:19 | 显示全部楼层
又长知识了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-29 20:32:10 | 显示全部楼层
qq1151985918 发表于 2021-1-29 08:36
1.不能是未定义的变量,你随便用的abcd被python默认为未定义的变量,在python中无法识别
2.不能是 列表 字 ...

不好意思,  学疏才浅,我有点咬文嚼字哈,  

按照所列  标准 , 用 到  dict()   里面, , 看我下面的例子,   sample=dict( 1=a),1 也是不可变,可是通不过,
然后 samle=dict(a=1)  又可以,   所以   还是题干的 疑问 的 延伸,   什么时候可以用 整数做键值, 什么时候又能够, 然后, 背后的逻辑是什么.    谢谢诶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-29 21:14:53 From FishC Mobile | 显示全部楼层
fazerse 发表于 2021-1-29 20:32
不好意思,  学疏才浅,我有点咬文嚼字哈,  

按照所列  标准 , 用 到  dict()   里面, , 看我下面的例子 ...

自己去学函数参数, 这个问题和 dict 就没什么关系了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-29 21:44:56 | 显示全部楼层    本楼为最佳答案   
如果你非要用 dict(**kwargs)的方式的话起码你的表达式得符合表达式的规则
表达式不允许 1 = 2 的形式自然就不能被python认同
同理 1 = "a" 也不允许
a = b 即使 b 没有定义的情况也不允许
表达式左边会是 key ,右边就是 value
如果你非得想要 通过 dict()来创建数字作为键值,不妨换一种方式
>>> listDict = [[1,2],[3,4]]
>>> dict(listDict)
{1: 2, 3: 4}

你可以 help(dict)来自己查看dict的用法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-1-29 22:21:33 | 显示全部楼层
那么说明  key  必须要 文本格式吗?  可是这里  2  作为KEY  又可以  ?
>>>字典的key必须是可哈希对象,包括字符串,数字。对其value可以是任意对象。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-1-29 23:58:18 | 显示全部楼层
qq1151985918 发表于 2021-1-29 21:44
如果你非要用 dict(**kwargs)的方式的话起码你的表达式得符合表达式的规则
表达式不允许 1 = 2 的形式自然 ...

真的  help(dict)   过, 可能我对帮助文档 的阅读方法还不甚了解 ,  进去看了 对 KEY  这部分没有 约束描述.
非常感谢你回答我的 追问.   再次感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-17 14:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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