浅谈Python的字典键名可以是哪些类型
今天看别人代码时发现一个事,就是把对象当作字典的键名,并且把两个对象(类的实例)当作键名,然后去查了下:
键必须是不可变的,如字符串,数字或元组。
1 键的类型,列表/字典不可以,其它都可以但是网上却没有说其他类型可不可以,怎么用的。我写代码试了下:
class Person: def __init__(self, name):self.name = namei = 5s = ’abc’t = (5,’a’)p = Person(’Lily’)q = Person(’xiao’)m = {’a’:1, ’b’:10}lst = [1,2,3]d = {}d[i] = ’five’d[s] = ’ABC’d[t] = ’five-a’d[p] = ’name:Lily’# d[lst] = ’list : 1,2,3’# TypeError: unhashable type: ’list’d[p, q] = ’two people: Lily and xiao’d[i,s,t,p,q] = ’all in key’for k, v in d.items(): print(k, ’=>’, v)
输出结果:
5 => fiveabc => ABC(5, ’a’) => five-a<__main__.Person object at 0x000001803EEF27F0> => name:Lily(<__main__.Person object at 0x000001803EEF27F0>, <__main__.Person object at 0x000001803EEF28D0>) => two people: Lily and xiao(5, ’abc’, (5, ’a’), <__main__.Person object at 0x000001803EEF27F0>, <__main__.Person object at 0x000001803EEF28D0>) => all in key
2 多个对象可当作键名,顺序不同时是不同的键print(d[p, q])print(d[q, p])
输出:
two people: Lily and xiaoTraceback (most recent call last):
File '<ipython-input-15-12aff481ab93>', line 1, in <module> runfile(’C:/Users/Xpeng/.spyder-py3/temp.py’, wdir=’C:/Users/Xpeng/.spyder-py3’)
File 'D:Program Files (x86)Microsoft Visual StudioSharedAnaconda3_64libsite-packagesspyderutilssitesitecustomize.py', line 705, in runfile execfile(filename, namespace)
File 'D:Program Files (x86)Microsoft Visual StudioSharedAnaconda3_64libsite-packagesspyderutilssitesitecustomize.py', line 102, in execfile exec(compile(f.read(), filename, ’exec’), namespace)
File 'C:/Users/Xpeng/.spyder-py3/temp.py', line 37, in <module> print(d[q, p])
KeyError: (<__main__.Person object at 0x000001803EF58940>, <__main__.Person object at 0x000001803EF58668>)
3 结论【有误】:(1)除了列表不能当作键名,其它都 可以,还可以放多个。(2)我是这样理解的,列表是可变的,其他类型都是不可变的。对象作为键名时,实际传入的是对象的地址,也是不可变的。(3)放多个时不同顺序时键不同。
------2020.04.07更新-----感谢两次网友的提醒。(1)准确的说是列表、字典这种不可哈希(unhashable)的类型不可当做键值,可哈希的类型才可当作键。
到此这篇关于浅谈Python的字典键名可以是哪些类型的文章就介绍到这了,更多相关Python 字典键名 内容请搜索好吧啦网以前的文章或继续浏览下面的相关文章希望大家以后多多支持好吧啦网!
相关文章:
1. 一文读懂Spring Cloud-Hystrix2. PHP终止脚本执行的实例代码3. 详解JavaScript是如何验证URL的4. SQL+HTML+PHP 一个简单论坛网站的综合开发案例(注册、登录、注销、修改信息、留言等)5. Python Pandas pandas.read_sql函数实例用法6. Python Opencv轮廓常用操作代码实例解析7. Python中Selenium模块的使用详解8. Python语言规范之Pylint的详细用法9. 使用python创建生成动态链接库dll的方法10. python用dataframe将csv中的0值数据转化为nan缺失值字样

网公网安备