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("
")
for k in dic.keys():
print(k, end=' ') #name age sex
#(2) 遍历所有的键值(value)
print("
")
for v in dic.values():
print(v, end=' ') #jin 18 male
#(3) 遍历所有的键值对(key,value)
print("
")
for k,v in dic.items():
print(k,v, end=' ') #name jin age 18 sex male
print("
")
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