目录
list, tuple, dictionary, set的底层细节
-
初识dict
dict全称dictionary(字典),使用键-值(key-value)存储,具有极快的查找速度。
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
注意:python3.7以及之后的dict是有序的,因为改了底层实现结构,查找效率由O(1)变为O(2),详情见https://segmentfault.com/a/1190000019852204
-
新增数据
>>> d['Adam'] = 67
>>> d['Adam']
67
-
修改数据
>>> d['Jack'] = 90
>>> d['Jack']
90
>>> d['Jack'] = 88
>>> d['Jack']
88
-
pop()
用pop(key)
方法,对应的value也会从dict中删除:
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}
-
遍历dict
方法一:直接for循环取出的是key
>>> l={'a':1,'b':2,'c':3}
>>> for i in l:
... print(i,l[i])
...
a 1
b 2
c 3
方法二:用dict.itmes()
>>> l={'a':1,'b':2,'c':3}
>>> for k,v in l.items():
... print(k,v)
...
a 1
b 2
c 3
遍历keys:
>>> for k in d.keys():
... print(k)
遍历values:
>>> for v in d.values():
... print(v)
-
根据value找key
把key和value分别list化,根据value的索引找key的索引
a_dict = {1:'0001', 2: '002'}
print(list(a_dict.keys())) # key 列表
print([list(a_dict.values()).index('002')]) # 对应的索引值
print(list(a_dict.keys())[list(a_dict.values()).index('002')])
#[ 1, 2]
# [1]
# 2
-
判断key是否存在
方法1,通过in判断key是否存在:
>>> 'Thomas' in d
False
方法2,通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:
>>> d.get('Thomas')
注意:返回None的时候Python的交互环境不显示结果。
下面这个方式有问题,搜一下用法
>>> d.get('Thomas', -1)
-1
-
dict和list的区别
dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
-
dict的key必须是不可变对象
在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key:
>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
-
list, tuple, dictionary, set的底层细节
list:对其它对象的引用组成的连续数组(可以理解为c中的数组) 查找的效率为O(n)
dict:
python3.7之前:散列表(hash table),查找的效率为O(1)
python3.7以及之后:由Indices(索引,数组实现) 和 Entries(实体,PyDictObject类型) 两种结构组成。查找效率为O(2)
set:没有value的dict,查找的效率为O(1)
#参考文档:https://blog.csdn.net/siyue0211/article/details/80560783
-
参考文档
dict的使用:
https://www.cnblogs.com/hukey/p/9621631.html
https://www.cnblogs.com/jiangzuofenghua/p/11379509.html
defaultdict用法:
http://kodango.com/understand-defaultdict-in-python