fazerse 发表于 2021-1-29 06:27:13

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

本帖最后由 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 08:06:44

顶一下{:10_256:}

qq1151985918 发表于 2021-1-29 08:36:38

1.不能是未定义的变量,你随便用的abcd被python默认为未定义的变量,在python中无法识别
2.不能是 列表 字典 等 这种不可哈希的对象不可哈希简单理解就是创建后依然可以变动和修改的对象,例如list可以 list.append 结果字典中的key值就变了,索引不到,当然就不可以,
简而言之,键值必须是不可变的

小甲鱼的铁粉 发表于 2021-1-29 09:02:23

{:10_256:}看三楼

洛阳城 发表于 2021-1-29 09:08:02

新建字典时键必须是字符串、整形,键值必须唯一并且不可变
但是通过dict()工厂函数新建字典时会默认表达式等号左边是字符串,你要是加上了引号反而会报错不能是赋值表达式

yywwf2003 发表于 2021-1-29 09:32:26

帮顶一下

私はり 发表于 2021-1-29 14:22:19

又长知识了

fazerse 发表于 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)又可以,   所以   还是题干的 疑问 的 延伸,   什么时候可以用 整数做键值, 什么时候又能够, 然后, 背后的逻辑是什么.    谢谢诶

永恒的蓝色梦想 发表于 2021-1-29 21:14:53

fazerse 发表于 2021-1-29 20:32
不好意思,学疏才浅,我有点咬文嚼字哈,

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

自己去学函数参数, 这个问题和 dict 就没什么关系了

qq1151985918 发表于 2021-1-29 21:44:56

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

你可以 help(dict)来自己查看dict的用法

Stubborn 发表于 2021-1-29 22:21:33

那么说明key必须要 文本格式吗?可是这里2作为KEY又可以?
>>>字典的key必须是可哈希对象,包括字符串,数字。对其value可以是任意对象。

fazerse 发表于 2021-1-29 23:58:18

qq1151985918 发表于 2021-1-29 21:44
如果你非要用 dict(**kwargs)的方式的话起码你的表达式得符合表达式的规则
表达式不允许 1 = 2 的形式自然 ...

真的help(dict)   过, 可能我对帮助文档 的阅读方法还不甚了解 ,进去看了 对 KEY这部分没有 约束描述.
非常感谢你回答我的 追问.   再次感谢
页: [1]
查看完整版本: 我花了2个小时才总结明白我的疑问,字典部分.