python数据类型【字典(dict)】
字典是无序,键不重复且元素只能是键值对的可变的容器
data={'k1':'v1','k2':'v2'}
-
字典也是个容器
-
元素必须是键值对
-
键不能重复,重复会被覆盖
data={'k':1,'k':2} data {'k';2}
-
无序(在python3.6+字典就是有序了,之前的字典都是无序的)
1.定义
v1={}
v2=dict()
字典对键值的要求:
- 键:必须可哈希
- 值,任意类型
data={
'wxy':29,
True:1,
123:5,
(11,22):['a','b']
}
一般情况在什么情况下会用到字典?
表示一组固定信息,用字典更加直观
#用户列表
user_list=[{'name':'wxy','age':18},{'name':'qfy',age:18}]
2.独有方法
-
获取值 get 【键不存在,不报错,默认返回None】
info={ 'name':'wxy', 'age':18 } info.get('age') 18
-
所有的键 keys()
info={ 'name':'wxy', 'age':18 } data=info.keys() data dict_keys(['name', 'age'])
注意:在python2中字典.keys()直接获取到的是列表,而python3中返回的是高仿列表,这个高仿的列表可以被循环显示
info={ 'name':'wxy', 'age':18 } for i in info.keys(): print(i)
-
所有的值 values()
info={ 'name':'wxy', 'age':18 } data=info.values() data dict_values(['wxy', 18])
-
所有的键值 items()
info={ 'name':'wxy', 'age':18 } data=info.tiems() data dict_items([('name', 'wxy'), ('age', 18)])
#判断是否存在 info={ 'name':'wxy', 'age':18 } if ('name',18) in info: print('yes')
-
设置值 setdefault()
info={ 'name':'wxy', 'age':18 } info['email']=123@qq.com info.setdefault('email','123@qq.com') info {'name':'wxy','age':18,'email':'123@qq.com'} #有键不修改 info.setdefault('email','567@qq.com') info {'name':'wxy','age':18,'email':'123@qq.com'}
-
更新字典键值对 update()
info={'name':'wxy','age':18} info.update({'age':14,'email':'123@qq.com'}) info {'name':'wxy','age':14,'email':'123@qq.com'}
-
移除指定键值对 pop()
info={'name':'wxy','age':14,'email':'123@qq.com'} info.pop('age') info {'name':'wxy','email':'123@qq.com'}
-
按照顺序移除(后进先出) popitem()
info={'name':'wxy','age':14,'email':'123@qq.com'} data=info.popitem() data {'email':'123@qq.com'} info {'name':'wxy','age':14}
-
根据键,设置默认值
# dict.fromkeys(键列表,默认值) stopwords = dict.fromkeys(['的', '或', '等', '是', '有', '之', '与'],None)
- py3.6后,popitem移除最后的值
- py3.6之前,popitem随机移除
3.公共方法
-
求并集(python3.9新加入)
v1={'k1';1,'k2':2} v2={'k2';2,'k4':4} v3=v1|v2 v3 {'k1';1,'k2':2,'k4':4}
-
长度
info={'name':'wxy','age':18} len(info) 2
-
是否包含
info={'name':'wxy','age':18} v1='age' in info v1 True
-
索引值(键)
字典不同于元组和列表,字典的索引是键,而列表和元组是0,1,2等数值
info={'name':'wxy','age':18} info['age'] 18
-
根据键修改值 和 添加值 和 删除键值对
通过键可以对字典进行过添加和更新操作
#添加 info={'name':'wxy','age':18} info['gender']='女' info {'name':'wxy','age':18,'gender':'女'} #修改 info={'name':'wxy','age':18} info['age']=21 info {'name':'wxy','age':21} #删除 info={'name':'wxy','age':18} del info['age'] 或 info.pop('age') info {'name':'wxy'}
-
for循环
由于字典也属于是容器,内部可以包含多个键值对,可以通过循环对其中的:键,值,键值进行循环
info={'name':'wxy','age':18} #所有键 for i in info: print(i) #所有键 for i in info.keys(): print(i) #所有值 for i in info.values(): print(i) #所有键值 for i in info.items(): print(i)
4.转换
转换为字典
v=dict([('k1',1),('k2',2)])
v {'k1':1,'k2':2}
info={'name':'wxy','age':18}
print(list(info)) ['name', 'age'] #默认是键
print(list(info.keys())) ['name', 'age']
print(list(info.values())) ['wxy', 18]
print(list(info.items())) [('name', 'wxy'), ('age', 18)]
5. 其他
5.1存储原理
5.2速度快
info={'name':'wxy','age':18}
for 'wxy' in info:
print('yes')
5.3嵌套
- 字典的键必须可哈希(list/set/dict不可哈希)
info={
(1,2):1
}
#错误的
-
字典的值可以是任意类型
-
字典的键和集合的元素再遇到布尔值和1,0时,需注意重复的情况
-
元组的元素不可以被替换