首页 > 其他 > 详细

阅读笔记2:字典和集合

时间:2018-09-17 10:06:08      阅读:143      评论:0      收藏:0      [点我收藏+]

1 泛映射类型

collections.abc模块中有Mapping和MutableMapping两个抽象基类,他们的作用视为dict和其他类似的类型定义形式接口(在python2.6-3.2中,这两个基类属于collections模块)

 技术分享图片
非抽象映射类型一般不会直接继承这些抽象基类,他们会直接对dict或者collections.User.Dict进行扩展
这些抽象基类的主要作用是作为形式化的文档,它们定义了构建一个映射类型所需要的最基本的接口。然后它们还可以和isinstance一起被用来判定某个数据是不是广义上的映射类型
标准库里的所有映射类型都是利用dict来实现的,他们有个共同的限制,只有可散列的数据类型才能用作这些映射里的键
可散列的数据类型:
如果一个对象是可散列的,那么在这个对象的生命周期中,它的散列值是不可变的,而且这个对象需要实现__hash__()方法。另外可散列对象还要有__qe__()方法,这样才能和其他键做比较。如果两个可散列对象是相等的,那么它们的散列值一定是一样的
原子不可变数据类型(str , bytes 和 数值类型)都是可散列类型,frozenset也是可散列的。
元组的话,只有当它所包含的所有元素都是可散列的,它才是可散列的
>>> t1 = (1, 2, (30, 40))
>>> hash(t1)
1350807749
>>> t2 = (1, 2, [30, 40])
>>> hash(t2)
 
Traceback (most recent call last):
File "<pyshell#92>", line 1, in <module>
hash(t2)
TypeError: unhashable type: ‘list‘
 
一般来说,用户自定义的类型的对象都是可散列的,散列值就是它们的id()函数的返回值,所以所有对象在比较的时候都是不相等的。如果一个对象实现了__eq__方法,并且在方法中用到了这个对象的内部状态的话,那么只有当所有这些内部状态都是不可变的情况下,这个对象才是可散列的
 
字典的构造方法:
>>> a = dict(one=1,two=2)
>>> b = {‘one‘:1, ‘two‘:2}
>>> c = dict(zip([‘one‘,‘two‘],[1,2]))
>>> d = dict([(‘one‘,1),(‘two‘,2)])
>>> e = dict({‘one‘:1, ‘two‘:2})
>>> a == b == c == d == e
True
 
2.字典推导
 
字典推导可以从任何以键值对作为元素的可迭代对象中构建出字典
 

阅读笔记2:字典和集合

原文:https://www.cnblogs.com/cherryjing/p/9660560.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!