前言
现实世界复杂的,更多数据更像字典数据形式,字典可以很好表达复杂一对多数据关系。
一、字典对比列表、元组
总结一下列表、元组等数据类型:
首先,列表list、元组tuple都是有序的一组数据,既然有有序也有无序,无序就用集合set和字典dict。
我把老师课件截图下来就很清楚了。
字典是一种映射关系由一对键和值组成数据集合类型。
字典的例子:药店的药品格子柜,每个格子都标上药名(键),格子里面存放着药品(值)。
二、字典
1.字典定义
字典定义:字典名={键:值},即dict={key:value}
dict1 = {'张三': 90, '李四': 100}
print(dict1) # {'张三': 90, '李四': 100}
# 通过关键字访问[]或者get方法
print(dict1['张三']) # 90
print(dict1.get('张三')) # 90
2.[]取值与get取值的区别。
dict1 = {'张三': 90, '李四': 100}
# 当键值不存在时返回None
print(dict1.get('王五')) # None
# 当键值不存在时程序报错KeyError
print(dict1['王五']) # None
找不到键值,[]的方式直接报错,而get返回None。如果是要进行判断键是否存在用get方法避免直接报错。
3.字典的嵌套
嵌套就是字典的值位置放入字典。
下面把{‘身高’:180,‘体重’:160}充当’张三’关键字对应的值。
dict1 = {'张三': {'身高': 180, '体重': 160}}
print(dict1)
# {'张三': {'身高': 180, '体重': 160}}
print(dict1['张三']['身高']) # 180
print(dict1.get('张三').get('身高')) # 180
嵌套之后,访问数据可以通过[]来逐层访问,也可以使用get方法。
下面演示一个嵌套的字典访问。
第一层zhangsan是关键字,对应的值是一个字典{‘interest’:[‘a’,‘b’,‘c’]}
interest是次一级关键字,对应的值是一个列表[‘a’,‘b’,‘c’]
dict1={'zhangsan':{'interest':['a','b','c']}}
print(dict1)
#{'zhangsan': {'interest': ['a', 'b', 'c']}}
# 通过[]实现逐层访问。
print(dict1['zhangsan']['interest']) #['a', 'b', 'c']
print(dict1['zhangsan']['interest'][0]) # a
嵌套使用使得字典数据类型可以很好对应现实情况,比如个人信息,就是很多数值结合在一起,既有一对一(比如:性别),也有一对多(比如:家庭成员)。
4.字典的增删改
dict1={'zhangsan':{'weight':160}}
#修改关键字zhangsan对应的值,把对应字典替换另外一个字典。
dict1['zhangsan']={'weight':150}
#修改关键字zhangsan对应的字典的weight关键对应的值
dict1['zhangsan']['weight']=140
#增和改句式都一样。
dict1['lisi']={'weight':120}
print(dict1)
#{'zhangsan': {'weight': 140}, 'lisi': {'weight': 120}}
#删
del dict1['lisi']
print(dict1)
#{'zhangsan': {'weight': 140}}
5.字典的循环遍历
dict.keys()返回关键字列表
dict.values()返回值列表
dict.items()返回关键和值列表
# 张三、李四、赵五的体重
dict1={'zhangsan':60,'lisi':80,'zhaowu':100}
key1=dict1.keys()
value1=dict1.values()
item1=dict1.items()
print(key1)
print(value1)
print(item1)
#dict_keys(['zhangsan', 'lisi', 'zhaowu'])
#dict_values([60, 80, 100])
#dict_items([('zhangsan', 60), ('lisi', 80), ('zhaowu', 100)])
遍历keys()、values()、items()
# 张三、李四、赵五的体重
dict1={'zhangsan':60,'lisi':80,'zhaowu':100}
#遍历关键字
for key in dict1.keys():
print(key,end=" ") #zhangsan lisi zhaowu
print()
#遍历值
for value in dict1.values():
print(value ,end=" ") #60 80 100
print()
#遍历关键字和值
for key,value in dict1.items():
print('key=',key,' value =',value)
#key= zhangsan value = 60
#key= lisi value = 80
#key= zhaowu value = 100
总结
字典是一对一的对应关系的数据,配合嵌套使用,可以表达一些一对多的组合信息。