字典内置函数&方法
dict.fromkeys([seq], val):创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
v = dict.fromkeys(["k1",123,"999"],'aa') print(v)
结果:{'999': 'aa', 'k1': 'aa', 123: 'aa'}
dict.get(key, default=None):返回指定键的值,如果值不在字典中返回default值(默认为None)
dic = { "k1": 'v1', "k2": 'v2' } print(dic.get('k1',123)) print(dic.get('k3')) print(dic.get('k3',1111111))
结果:v1 None 1111111
直接用索引取值的方式,没有指定键的值就会报错
dic = { "k1": 'v1', "k2": 'v2' } print(dic['k3'])
结果:KeyError: 'k3'
pop(key,default):删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出,如果值不在字典中返回default值。
dic = { "k1": 'v1', "k2": 'v2' } v = dic.pop('k1',123) print(dic,v) v = dic.pop('k3',900) print(dic,v)
结果:{'k2': 'v2'} v1
{'k2': 'v2'} 900
popitem():随机返回并删除字典中的一对键和值。
dic = { "k1": 'v1', "k2": 'v2' } k,v = dic.popitem() print(dic,k,v)
结果:{'k2': 'v2'} k1 v1
dict.setdefault(key, default=None):设置值。如已存在,不设置,获取当前key对应的值;如不存在,设置,获取当前key对应的值 。
dic = { "k1": 'v1', "k2": 'v2' } v = dic.setdefault('k1',200) print(dic,v) v = dic.setdefault('k3',200) print(dic,v)
结果:{'k2': 'v2', 'k1': 'v1'} v1
{'k3': 200, 'k2': 'v2', 'k1': 'v1'} 200
dict.update(dict2):把字典dict2的键/值对更新到dict里。存在的就替换,不存在的就添加。
dic = { "k1": 'v1', "k2": 'v2' } dic.update({'k1': '111111','k3': 123}) print(dic) dic.update(k3=345,k5="asdf") print(dic)
结果:{'k2': 'v2', 'k1': '111111', 'k3': 123}
{'k5': 'asdf', 'k2': 'v2', 'k1': '111111', 'k3': 345}
dict.keys() dict.values() dict.items():以列表返回一个字典所有的键/值/键值对,主要用于遍历与循环
dic = { "k1": 'v1', "k2": 'v2' } for k,v in dic.items(): print(k,v)
结果:k2 v2
k1 v1
dic = { "k1": 'v1', "k2": 'v2' } v = 'k1' in dic print(v) v = 'v1' in dic.values() print(v)
结果:True
True
数据类型总结
可变不可变:
python中的不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象;可变数据类型,允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。
a = [1] b = [1] print(id(a),id(b)) a,b = 1,1 print(id(a),id(b))
结果:11793288 11794696
491507440 491507440
根据可变数据类型与不可变数据类型的概念,只需要在改变value值的同时,使用id()函数查看变量id值是否变化就可以知道这种数据类型是可变的还是不可变的了。
可变数据类型:列表,字典
不可变数据类型:字符串,数字,元组
访问顺序:
直接访问:数字
顺序访问:字符串,列表,元组(有序的,下标和切片的方式)
映射访问:字典(无序的,比顺序访问效率高,但是更耗内存)
存放元素个数:
容器类型:列表,元组,字典(多个元素)
原子类型:数字,字符串(单个元素)