字典的使用
列表可以存储任意数据类型,但是一般情况下,我们都存储单一数据类型
names = ['张三','lisi','wangwu']
scores = [100,98,80,60]
persons = ['张三','18,89,78,99']
列表只能存储值,但是无法对值进行描述
- 字典不仅可以保存值,还能对值进行描述
- 使用大括号来表示一个字典,不仅有值value,还有值的描述key
- 字典里的数据都是以键值对key-value的形式保留
- key 和 value之间使用冒号:连接
- 多个键值对之间使用逗号,来分割
person = {'name':'zhangsan',
'age':18,
'math':98,
'Chinese':95
}
print(person)
字典使用注意事项
- 字典里的key不允许重复,如果key重复了,后一个key的值会覆盖前一个
- 字典里的value可以是任意数据类型,但是key只能使用不可变数据类型,一般使用字符串
person = {'name':'zhangsan',
'age':18,
'height':180,
'age':20, # 会替换上一个age的值
'isPass':True, #值可以是布尔值
'hobbies':['唱','跳','篮球'],#value可以是列表
4:'good',
('yes','ss'):100
#['yes','ss']:100 # key只能是不可变数据类型,列表是可变数据类型会报错(TypeError: unhashable type: 'list')
}
print(person)
字典的增删改查
person = {'name':'zhangsan','age':18,'x':'y'}
# 查找数据(字典的数据在保存时,是无序的,不能通过下标来获取)
print(person['name']) #使用key获取到对应的value
x = 'age'
print(person[x])
print(person['x'])
#print(person['height']) # 如果要查找的key不存在,会直接报错
# 需求:获取一个不存在的key时,不报错,如果这个key不存在,使用默认值
# 使用字典的get方法
print(person.get('height','female')) # 如果根据key获取不到value,使用给定的默认值,没有给默认值,是none默认
#只是使用了默认值,并没有添加到字典里面
print(person.get('name','lisi'))
print(person)
# 直接使用key可以修改对应的value
person['name'] = 'lisi'
print(person)
person['gender'] = 'female'
# 如果key存在,是修改key对应的value
# 如果key不存在,会往字典添加一个新的key-value
print(person)
# pop删除键值对
person.pop('name')
print(person)
# popitem 删除最后的一个元素,结果是被删除的这个元素组成的键值对
result = person.popitem()
print(result)
print(person)
# update方法的使用
a = {'name':'zhangsan','age':18}
b = {'addr':'襄阳','height':180}
a.update(b)
print(a)
#扩展复习
# 列表可以使用extend方法将两个列表合并成为一个列表
nums1 = [1,2,3,4]
nums2 = [4,5,6,7]
nums1.extend(nums2)
print(nums1)
print(nums1 + nums2)
word1 = ('hello','world')
word2 = ('yes','ok')
print(word1 + word2)
# print(a + b) # TypeError: unsupported operand type(s) for +: 'dict' and 'dict' 字典不能使用加法+
# 字典的遍历
person = {'name':'zhangsan','age':18,'x':'y'}
#特殊在列表和元组是一个单一的数据,但是字典是键值对的形式
# 第一种遍历的方式:直接for...in循环字典
for x in person: # 循环获取到的是key
print(x)
# 第二种方式:获取所有的key,然后再遍历key,根据key获取value
for k in person.keys():
print(k)
# 第三种方式:获取到所有的value
for v in person.values(): #只能拿到值,不能拿到key,所以一般不用
print(v)
# 第四种遍历方式
for item in person.items():
print(item[0],'=',item[1])
for k,v in person.items():
print(k,'=',v)
字典练习题
chars = ['a','c','x','d','p','a','m','q','s','t','p','a','t','c']
# 把字符的次数组成一个字典
char_count = {}
for char in chars:
if char in char_count:
char_count[char] += 1
else:
char_count[char] = 1
print(char_count)
persons = [
{'name':'zhangsan','age':18},
{'name':'lisi','age':20},
{'name':'wanger','age':17},
]
# 让用户输入姓名,如果姓名已存在,提示用户,如果姓名不存在,继续输入年龄,并存入列表里
x = input("请输入姓名:")
for person in persons:
if person['name'] == x:
print("名字已存在")
break
else:
print('您输入的名字不存在')
new_person = {'name':x}
y = input('请输入您的年龄:')
new_person['age'] = y
persons.append(new_person)
print(persons)
# 字典推导式
dict1 = {'a':100,'b':200,'c':300}
dict2 = {v: k for k,v in dict1.items()}
print(dict2)
# 字典推导式是{} 列表推导式是[]