字典的使用
# 列表可以存储任意数据类型,但是一般情况在,我们都存储单一数据类型
nums = ['zhangsan', 'lisi', '王五']
scores = [100, 98, 99, 97]
# 这个列表的每个元素到底代表什么? 列表只能存储值但是无法对值进行描述
# 比如下面这个列表记录一个同学各科成绩以及身高和体重如果用字典就更合适
person = ['zhangsan', 18, 98, 97, 95, 93, 180, 150]
# 字典不仅可以保存值,还能对值进行描述;使用一个大括号来表示一个字典
# 字典里的数据都是以键值对(key:value)的形式保留的
人 = {'name' : 'zhangsan',
'age' : 18, 'math' : 98,
'chinese' : 95,
'English' : 95,
'gym' : 93,
'height' : 180,
'weight' : 150
}
字典的注意事项
# 1.字典里的key不允许重复,如果key重复了,后一个key对应的值会覆盖前面一个
# 2.字典里的value可以是任意数据类型,但是key只能是不可变数据类型,一般用字符串
person = {'name' : 'zhangsan',
'age' : 18,
'height' : 18,
'age' : 20, # 会替换上一个age的值
'isPass' : True, # 可以是布尔值
'hobbies' : ['唱', '跳', '篮球', 'rap'], # 也可以是列表
4:'good', # key只要是不可变数据类型都可以;整数是不可变数据类型
('yes','hello'):100, # 元组也是不可变数据类型
# ['ok','no']:'hi' 报错;列表是可变数据类型
}
print(person) # {'name': 'zhangsan', 'age': 20, 'height': 18, 'isPass': True,
# 'hobbies': ['唱', '跳', '篮球', 'rap'], 4: 'good', ('yes', 'hello'): 100}
字典的查询
# 字典的数据在保存时,是无序的;不能通过下标来获取也不能通过value来找key
person = {'name' : 'zhangsan', 'age' : 18, '甲':'商人'}
# 查找数据
print(person['name']) # zhangsan 使用key获取对应的value
甲 = 'age'
print(person[甲]) # 18
print(person['甲']) # 商人
# print(person['height']) 如果查找的key不存在,会直接报错
# 1.那怎么查找一个不知道存在还是不存在的key又不报错呢? 使用字典的get方法
print(person.get('height'))
if person.get('height') == None:
print('没有这个信息啊!')
# 2.如果根据key获取不到value,使用给定的默认值
print(person.get('height', 180)) # 180 没有'height'就给一个默认值180;这个值不会加入字典里面
print(person.get('name', '李四')) # zhangsan 如果获取到不会取默认值
字典的增删改
# 1.修改
person = {'name':'zhangsan','age':18}
print(person['name']) # zhangsan
# 直接使用key可以修改对应的value
person['name'] = '李四'
print(person) # {'name': '李四', 'age': 18}
# 2.增加
# 如果key在字典中不存在,会往字典里添加一个新的key:value(键对值)
person['height'] = 180
print(person) # {'name': '李四', 'age': 18, 'height': 180}
# 3.删除
# pop方法:通过指定key删除这个键值对,并返回这个键值对的value
print(person.pop('name')) # 返回删除的键值对的value
print(person) # {'age': 18, 'height': 180}
# popitem方法:随机删除一个键值对,并返回删除的键值对
print(person.popitem()) # ('height', 180) 返回删除的键值对
print(person) # {'age': 18}
# clear方法:清空字典
print(person.clear()) # None
print(person) # {}
person = {'name':'zhangsan','age':18,'addr':'襄阳'}
# del命令
del person['addr']
print(person) # {'name': 'zhangsan', 'age': 18}
字典的合并
# 列表可以使用extend方法将两个列表合并成为一个列表
nums1 = [1, 2, 3, 4, 5]
nums2 = [6, 7, 8, 9]
nums1.extend(nums2)
print(nums1) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
nums3 = nums1 + nums2 # 加法运算
print(nums3) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 6, 7, 8, 9]
#元组是不可变数据类型;不能赋值,但是可以运算
tupre1 =('甲','乙','丙','丁')
tuper2 =('戊','己','庚','辛')
tuper3 = tupre1 + tuper2
print(tuper3) # ('甲', '乙', '丙', '丁', '戊', '己', '庚', '辛')
# 字典使用update合并两个字典,但是不支持加法运算
person1 = {'name' : '张三', 'age' : 18}
person2 = {'addr' : '襄阳', 'height' : 180}
person1.update(person2)
print(person1) # {'name': '张三', 'age': 18, 'addr': '襄阳', 'height': 180}
# person3 = person1 + person2 报错
字典的元素遍历
# 特殊之处:列表和元组是一个单一的数据,但是字典是键对值的形式
person = {'name' : 'zhangsan', 'age' : 18, 'height' : '180cm'}
# 1.for...in循环字典,以键值对为单位进行循环,但是获取的是key---常用的方法
for 甲 in person:
print(甲) # 返回的是key如下:
# name
# age
# height
print(甲,'=',person[甲]) # 这样可以获取到value
# name = zhangsan
# age = 18
# height = 180cm
# 2.获取到所有的key,然后再遍历key,根据key获取value
print(person.keys()) # dict_keys(['name', 'age', 'height'])
for 乙 in person.keys():
print(乙,'=',person[乙])
# name = zhangsan
# age = 18
# height = 180cm
# 3.获取到所有的value,但是基本上不会用因为只能拿到value不能拿到key
for 丙 in person.values():
print(丙)
# zhangsan
# 18
# 180cm
# 4.遍历键对值,获取到的也是键对值
print(person.items()) # dict_items([('name', 'zhangsan'), ('age', 18), ('height', '180cm')])
for 丁 in person.items():
print(丁) # 这拿到的是元组,可以如下转换一下
# ('name', 'zhangsan')
# ('age', 18)
# ('height', '180cm')
print(丁[0],'=',丁[1]) # 取元组里的元素再加等号
# name = zhangsan
# age = 18
# height = 180cm
# 上面转换方法还不是最简单的;还可以直接拆包
for 戊,己 in person.items():
print(戊, '=', 己)
# name = zhangsan
# age = 18
# height = 180cm
字典推导式
# 如下字典把key和value调换位置
# 常规语法:
癸 = {'a':100,'b':200,'c':300} #--->{100:'a',200:'b',300:'c'}
子 ={} # 先创建一个新字典
for 丑,寅 in 癸.items():
子[寅] = 丑
癸 = 子
print(癸) # {100: 'a', 200: 'b', 300: 'c'}
# 字典推导式语法:
卯 = {'a':100,'b':200,'c':300}
辰 = {午:巳 for 巳,午 in 卯.items()}
print(辰) # {100: 'a', 200: 'b', 300: 'c'}
# 推导式详解:
# 辰 = {午:巳} # 先声明一个字典
# 辰 = {午:巳 for 巳,午 in 卯.items()} # 再加一个for...in循环;循环出来的一个可迭代对象赋值给上面声明的字典