Python进阶07_泛映射类型

字典是Python的基石,与它相关的内置函数都在__builtins__.__dict__模块中。想要理解和掌握背后的原理就需要理解散列表。

泛映射类型

collections.abc 模块中有 Mapping 和 MutableMapping这两个抽象基类,作用是为dict 和其他类似的类型定义形式接口。具体模块如下UML图。

Mapping 和 MutableMapping

什么是广义的映射类型

广义上的映射一般继承Mapping 和 MutableMapping这两个抽象基类。判断一个数据类型是不是映射类型:

  • isinstance 来判断,如下实例。
    通常定义一个映射类,都是通过继承 dict 或是
    collections.UserDict 进行扩展。在标准库中的映射也都是利用dict来实现的。这样有一个共同点是:
  • 只有可散列的数据类型才能作为映射里面的

什么是可散列的数据类型

官方的解释:
如果一个对象是可散列的,那么在这个对象的生命周期中,它的散列值是不变的,而且这个对象需要实现 __hash__() 方法。另外可散列对象还要有 __eq__()方法, 这样才能跟其他键做比较。如果两个可散列对象是相等的,那么它们的散列值一定是一样的……
其实一句话:不可变数据类型(str、bytes 和数值类型)都属于可散列的数据类型。

注意:
元组的话,只有当一个元组包含的所有元素都是可散列类型的情况下,它才是可散列的。可以利用frozenset函数强制变成克散列的状态。

# 判断是否为maping类型的简单方法
from collections import abc
my_dict = {}
print(isinstance(my_dict,abc.Mapping))
True
tt = (1,2,(30,40))
print(hash(tt))

# 回报错,因为不是散列
tl = (1,2,[30,40])
#print(hash(tl))

# frozenset 
tf = (1,2,frozenset([30,40]))
print(hash(tf))
8027212646858338501
985328935373711578

字典

字典的创建:

a = dict(one=1,tow=2)
b = {'one':1,'tow':2}
c = dict(zip(['one','tow'],[1,2]))
d = dict([('one',1),('tow',2)])
e = dict({'one':1,'tow':2})
print(a)
print(b)
print(c)
print(d)
print(e)
{'one': 1, 'tow': 2}
{'one': 1, 'tow': 2}
{'one': 1, 'tow': 2}
{'one': 1, 'tow': 2}
{'one': 1, 'tow': 2}

分享关于人工智能,机器学习,深度学习以及计算机视觉的好文章,同时自己对于这个领域学习心得笔记。想要一起深入学习人工智能的小伙伴一起结伴学习吧!扫码上车!

瓦力人工智能 - 扫码上车

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值