Python 元组和字典

定义

元组定义: t = {}  或者  t = set()

字典定义:d = {} 或者 d = dict()

定义形式相同但是存储元素不同,如:元组 t = {1, 2, 3},字典 d = {1: 1, 2: 2,  3: 3}

描述

元组和字典为无序容器。

元组和字典为python的内置类型。

元组和字典存储方式为hash表存储。

元组为无键值的字典。

元组和字典的key值不能重复。

由于是基于hash表存储,存取速度取决于hash算法。

Python 中所有的类型(内置类型,自定义类型)都有默认的hash和比较算法,故所有类型都能存储到元组或字典。

Python 非基础类型(容器、类等)默认hash函数和比较算法函数都是基于类型实例的地址进行计算的。

元组和字典不能存在相同元素,如果存在,则后面的元素将覆盖前面的元素。

如 t = {1, 2, 2, 3} 和 t = {1, 2, 3}等效, d = {1:1, 2: 2, 2: 20, 3:3} 和 d = {1:1, 2:20, 3:3}等效

自定义Hash

Python 非基础类型的hash和比较算法是基于实例的地址进行计算的,对于自定义类,每个实例对象都将成员其一个元素。

现在我需要通过x值进行比较,如果x值相同则认为两个实例相同,怎么实现?

答:重载类的__hash__算法和__eq__(或者__cmp__)算法即可。

使用方法

字典:键值对的使用

部分函数描述(其他都是通常用法,不做描述)

fromkeys(S, v=None):将一个列表S(链表或元组)的元素转换为字典的key值,默认值为v。

如:l = [1, 2]; d = dict.fromkeys(l)   ==> {1: None, 2: None, 3: None}

get(k, d=None):读取字典中key值为k的值,如果k不存在,则返回d默认值。

如:d = {1:1, 2:2},get(3)  ==> None,   通过d[3]取值,将会抛出异常

集合:集合的操作(交集、并集、差集等)

d1 = {1, 2, 3}

d2 = {2, 3, 4, 5}

d1.union(d2) # 并集 {1, 2, 3, 4, 5}

d1.intersection(d2) # 交集 {2, 3}

d1.symmetric_difference(d2) # 差集{1, 4, 5}

d1.difference(d2) # 差集(d1存在,d2不存在){1}

d2.difference(d1) # 差集(d2存在,d1不存在){4, 5}

其他

(1)链表去重:l = [1, 2, 2, 3],

无序去重: l = list(set(l))

有序去重: l = sorted(list(set(l)), key=l.index)

(2)有序字典:collections.OrderedDict()

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐