基础数据类型(三)
3、字典Dict
字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。
字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
3.1、增加
dic= {'name': 'jin', 'age': 18, 'sex': 'male'} #1、通过键名key进行添加 dic['weight'] = '65' print(dic) #{'name': 'jin', 'age': 18, 'sex': 'male', 'weight': '65'} #2、字典中有同名key则不执行操作,没有才会添加 dic.setdefault('age',21) print(dic) #{'name': 'jin', 'age': 18, 'sex': 'male', 'weight': '65'} dic.setdefault('hobby','rabbit') print(dic) #{'name': 'jin', 'age': 18, 'sex': 'male', 'name2': '依米', 'hobby': 'rabbit'} #注意:如果不给值则默认值设为None dic.setdefault('hobby') print(dic) #{'name': 'jin', 'age': 18, 'sex': 'male', 'weight': '65', 'hobby': None}
3.2、删除
#1、pop(key) 按key删除,有返回值 dic = {'name': 'jin', 'age': 18, 'sex': 'male','high': 175} #注意:如果删除一个不存在的键则会报错 dic.pop('high1') #KeyError: 'high1' retval = dic.pop('high') print(retval) #175 print(dic) #{'name': 'jin', 'age': 18, 'sex': 'male'} #2、del dic[key] 删除键值对 dic = {'name': 'jin', 'age': 18, 'sex': 'male','high': 175} del dic['age'] print(dic) #{'name': 'jin', 'sex': 'male', 'high': 175} #从内存中删除整个字典 del dic print(dic) #报错:name 'dic' is not defined #3、clear() 清空字典 dic = {'name': 'jin', 'age': 18, 'sex': 'male','high': 175} dic.clear() print(dic) #{} #4、popitem() 随机删除字典中的某个键值对,将删除的键值对以元祖的形式返回 dic = {'name': 'jin', 'age': 18, 'sex': 'male','high': 175} retval = dic.popitem() print(retval) #('high', 175) print(dic) #{'name': 'jin', 'age': 18, 'sex': 'male'}
3.3、修改
dic = {'name': 'jin', 'age': 18, 'sex': 'male'} #1、 dic['key'] = value 有key就覆盖 dic['age'] = 21 print(dic) #{'name': 'jin', 'age': 21, 'sex': 'male'} #2、dic2.update(dic) 将dic的键值对会覆盖添加到dic2中,dic保持不变 dic = {'name': 'jin', 'age': 18, 'sex': 'male'} dic2 = {'name': 'alex', 'weight': 75} dic2.update(dic) print(dic) #{'name': 'jin', 'age': 18, 'sex': 'male'} print(dic2) #{'name': 'jin', 'weight': 75, 'age': 18, 'sex': 'male'}
3.4、查询
dic = {'name': 'jin', 'age': 18, 'sex': 'male'} #1、通过键名key查询 print(dic['name']) #jin #注意:如果没有找到要查询的key则会报错 # print(dic['name2']) #KeyError: 'name2' #2、通过get(key) 查询 print(dic.get('name')) #jin #不会报错,会输出一个None print(dic.get('name2')) #None #没有找到,会输出用户提示的信息 print(dic.get('name2','没有此键值对')) #没有此键值对 #3、通过for循环进行遍历查询 #(1) 遍历所有的键名(key) for k in dic: print(k, end=' ') #name age sex print("\n") for k in dic.keys(): print(k, end=' ') #name age sex #(2) 遍历所有的键值(value) print("\n") for v in dic.values(): print(v, end=' ') #jin 18 male #(3) 遍历所有的键值对(key,value) print("\n") for k,v in dic.items(): print(k,v, end=' ') #name jin age 18 sex male print("\n") for k in dic: print(k,dic[k], end=' ') #name jin age 18 sex male
3.5、字典的嵌套
dic = { 'name':'hello', 'name_list':[1,2,3], 1:{ 'years':['2017','2019'], 'py':{'name':'python3','age':5} } } #1、[1,2,3]追加'wusir' dic['name_list'].append('wusir') print(dic['name_list']) #输出结果:[1, 2, 3, 'wusir'] #2、['2017','2019'] 在2017、2019中间插入一个2018 dic[1]['years'].insert(1,'2018') print(dic[1]['years']) #输出结果:['2017', '2018', '2019'] #3、{'name':'python3','age':5} 添加一个键值对,hobby:code dic[1]['py']['hobby'] = 'code' print(dic[1]['py']) #输出结果:{'name': 'python3', 'age': 5, 'hobby': 'code'}
数据类型总结:
# 可变与不可变: # 不可变数据类型: int、str、bool、元组tuple # 可变数据类型: 列表list、字典dict、集合set