一、字典
1、字典简介:
字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。
字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过索引存取。
PS:数据类型划分:可变数据类型 和 不可变数据类型
不可变数据类型:元组、bool、int、str (可哈希)
可便数据类型:list,dict,set (不可哈希)
dict key:必须是不可变数据类型,可哈希
value:任意数据类型
dict优点:二分查找去查询,存储大量的关系型数据
特点:无序的
2、字典用法:
1)增:
dic1 = {'age':18,'name':'liu','sex':'male'}
dic1['high'] = 185 #没有键值对,添加
结果:{'age': 18, 'name': 'liu', 'sex': 'male', 'high': 185}
dic1['age'] = 16 #如果有键,则值覆盖
结果:{'age': 16, 'name': 'liu', 'sex': 'male'}
dic1.setdefault('weight')
结果:{'age': 18, 'name': 'liu', 'sex': 'male', 'weight': None}
dic1.setdefault('weight',110) #有键值对,不做任改变,没有才添加。
结果:{'age': 18, 'name': 'liu', 'sex': 'male', 'weight':110}
dic1.setdefault('name','Liu') #有键值对,不做任改变,没有才添加。
结果{'age': 18, 'name': 'liu', 'sex': 'male'}
2)删:
dic = {'age':18,'name':'liu','sex':'male'}
dic.pop('age') #有返回值,按键去删删除
结果:{'name': 'liu', 'sex': 'male'}
dic.pop('瓜子',None) #可设置返回值,没设置返回值会报错,返回值为None
结果:{'age': 18, 'name': 'liu', 'sex': 'male'}
dic.popitem() #随机删除 有返回值 元组里面是删除键值,Python3.6以后是默认删除最后一个
结果:{'age': 18, 'name': 'liu'}
del dic['name'] #删除指定键值对,如果没有会报错。
结果:{'age': 18, 'sex': 'male'}
del dic #直接删除字典,会报错。
结果:报错
dic.clear() #清空字典
结果:{}
3)改:
dic = {'age':18,'name':'liu','sex':'male'}
dic['age'] = 16 #覆盖就是更改
结果:{'age': 16, 'name': 'liu', 'sex': 'male'}
dic = {'age':18,'name':'liu','sex':'male'}
dic1 = {'name':'志东','weight':65}
dic.update(dic1) #直接替代更新,用字典更新替代老的字典.update前面的是被更新的字典
print(dic)
结果:{'age': 18, 'name': '志东', 'sex': 'male', 'weight': 65} #更新后的字典
print(dic1)
结果:{'name': '志东', 'weight': 65} #原字典
4)查:
dic = {'age':18,'name':'liu','sex':'male'}
print(dic.keys()) #字典的键值对 以列表形式输出 但是类型是键值对型
结果:dict_keys(['age', 'name', 'sex'])
print(type(dic.keys()))
结果dict_keys
print(dic.values()) #字典的值 以列表形式输出 但是类型是键值对型
结果:dict_values([18, 'liu', 'male'])
print(type(dic.values()))
结果:dict_values
print(dic.items()) #字典的键值对 以元祖形式输出 但是类型是键值对型
结果:dict_items([('age', 18), ('name', 'liu'), ('sex', 'male')])
for i in dic: #默认打印出键值,后面跟.value可以打印出数值,后面跟.items可以打印键值对
print(i)
结果:age
name
sex
print(dic.get('age')) #根据键找对应的数值,不报错 可以自定义值 默认返回 None
结果:18
for i , j in dic.items():
print(i,j)
结果
age 18
name liu
sex male