字典(dict)
一、初识字典
1.描述
字典是项目开发过程中使用频率最高的一个组合数据类型。用于存放具有映射关系的数据,比如成绩单科目和成绩是要一一对应的,语文:85,数学:92,英语:98。
2.特点
- 可改变的
- 可存放任意类型数据
- 存放格式为key:value,多个键值对以逗号分隔
- key是唯一的且为不可变类型,元组可以作为字典的key,但列表不行。value可重复且类型无限制。
- 如果key重复,后面的value会替换前面的value。
dic1 = {'name' : 'zhangsan' , 'age' : 20 , 'address' : 'BeiJing' , 'name' : 'lisi'}
print(dic1) # {'name' : 'lisi' , 'age' : 23 , 'address' : 'BeiJing'}
3.声明
- d = dict()
- d = {}
- d = {key1:value1,key2:value2,…}
fruits = {
'苹果': {'name': 'apple', 'price': 5.00, 'count': 20},
'香蕉': {'name': 'banana', 'price': 2.50, 'count': 10},
'梨': {'name': 'pear', 'price': 3, 'count': 15},
'桃': {'name': 'peach', 'price': 2, 'count': 10}
}
二、字典的增删改查
1.增加
方法 | 描述 |
字典名[key] = value | 如果键不存在,将键值对添加到字典末尾;如果存在,则覆盖 |
setdefault(key,default_value) | 如果键不存在,将键值对添加到字典末尾,且将值设为default;如果存在,也不会覆盖。 |
zs = {'name':'zs',"age":20,'height':170}
# 增加键值对:weight
# zs['weight'] = 70
# zs['weight'] = 80 # 覆盖掉原值
# print(zs)
# 增加键值对:weight
zs.setdefault('weight',70)
# zs.setdefault('weight',80) # 不覆盖
zs.setdefault('name','ls') # 不能修改
print(zs)
2.删除
方法 | 描述 |
pop(key) | 根据key删除一个指定键值对,返回值为被删除的值。 |
popitem() | 删除并返回最后一个键值对(python>=3.7);随机删除一个键值对(python<3.7) |
clear() | 清空字典 |
del | 删除整个字典,或者根据key删除一个指定键值对。 |
zs = {'name':'zs',"age":20,'height':170}
# pop(key) # 返回删除的值
# print(zs.pop('age'))
# popitem() # 返回删除的键值对
print("张三的重量是:",zs.popitem()[1])
print(zs)
# del3
del zs # 删除整个zs变量
del zs['name'] # 删除name键值对
# clear()
zs.clear() # 清空字典
3.修改
方法 | 描述 |
字典名[key] = value | key存在才会被修改;否则是增加。 |
update({key:value}) | 传递一个字典,如果key相同则覆盖,没有则添加 |
zs_1 = {'name':'zs',"age":20,'height':170}
zs_2 = {"name":'zs','weight':60,"age":30}
# zs_1.update(zs_2)
# print(zs_1) # {'name': 'zs', 'age': 30, 'height': 170, 'weight': 60}
# print(zs_2) # 没有变化
zs_2.update(zs_1)
print(zs_1) # 没有变化
print(zs_2) # {'name': 'zs', 'weight': 60, 'age': 20, 'height': 170}
4.查看
方法 | 描述 |
字典名[key] | 通过指定的key获取对应的value |
get(key,[返回的信息]) | 根据一个key获取对应的value。不存在默认返回None,返回值可自定义。 |
items() | 获取字典中所有的键值对,返回值是一个可迭代的对象,字典的每一个键值以列表形式放在该列表里。 |
keys() | 获取字典中所有的key值。 |
values() | 获取字典中所有的value值 |
注意:
keys,values,items 获得的类型不是列表,但是是可迭代对象,可以直接使用for循环遍历,如果需要按照列表方式操作,需要先转化为列表。
zs = {'name':'zs',"age":20,'height':170}
# print(zs['name']) # zs
# print(zs['hometown']) # 报错
# 使用get解决
print(zs.get('name',"不存在")) # zs
print(zs.get('hometown',"沧州")) # 不报错,返回自定义信息
for i in zs.items():
print(i) # 打印所有的键值对(元组形式)
for i in zs.keys():
print(i) # 打印所有的键
for i in zs.values():
print(i) # 打所有的值
# 直接遍历字典,相当与遍历所有的键
for i in zs:
print(i) # 打印所有的键
5.其他方法
方法 | 描述 |
clear() | 清空字典 |
copy() | 复制字典 |
fromkeys() | 根据给定的数据作为key初始化一个字典。 |
6.其他操作
- in , not in:判定
zs = {'name':'zs',"age":20,'height':170}
# print(zs['name']) # zs
# print(zs['hometown']) # 报错
# 判定
if 'hometown' in zs:
print(zs['hometown'])
- 赋值和遍历
# 赋值:但是将键赋值给遍历
d1 = {1:"a",2:'b}
m, n = d1
# print(m,n) # 1,2
# 遍历:遍历字典的键
for i in d1:
print(i)
三、字典和列表的区别
- 列表:强调整体,记录整体的某一个特征
- 字典:强调个体,记录个体的多个特征。