字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值key=>value
对用冒号:
分割,每个对之间用逗号,
分割,整个字典包括在花括号{}
中 。
1.字典的增删改查
1.增
1. 通过 字典名["键"] = "值"
来添加:
dic = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
dic["德邦"] = "赵信"
print(dic) # {'草丛伦': '大宝剑', '易大师': '剑圣', '剑豪': '压缩', '德邦': '赵信'}
注意:如果添加的键在原字典中已经存在,那么就是更新这个键所对应的值;如果添加的键在字典中没有,那么才是在字典中添加一个新的键值对。
2. dict.setdefault("键","值")
dic = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
dic.setdefault("火女","安妮")
print(dic) # {'火女': '安妮', '草丛伦': '大宝剑', '剑豪': '压缩', '易大师': '剑圣'}
该方法也可以进行查询。
如果没有对应的key
,则返回None
。
2.删
1. dict.pop(key):
参数解析:
key:将要删除的键值对中的键。
该方法需要传入一个字典中的键,然后对应删除这个键在字典中的所代表的的键值对。
注意:这个方法 会将被删除的键值对中的值返回。
注意:如果删除的键值不在字典中,该方法会抛出KeyError异常。
dic1 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
ret = dic1.pop("易大师")
print(ret) # 剑圣
print(dic1) # {'剑豪': '压缩', '草丛伦': '大宝剑'}
2. del dict[key]:
删除。
参数解析:
key:字典中的键。
该方法同样需要传入一个字典中的键。
这个方法没有返回值。
注意:如果删除的键值不在字典中,该方法会抛出KeyError异常。
dic1 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
del dic1["剑豪"]
print(dic1) # {'易大师': '剑圣', '草丛伦': '大宝剑'}
3.改
1. 通过 字典名["键"] = "值"来修改:
如果键在字典中已经存在,那么则是修改键对应的值;如果不在字典中,那么则是添加键值。
dic1 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
dic1["草丛伦"] = "盖伦"
print(dic1) # {"易大师":"剑圣","剑豪":"压缩","草丛伦":"盖伦"}
2. dic1.update(dic2):
将字典dic2中的键值更新到字典dic1中。
dic1 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
dic2 = {"剑圣":"易大师","维恩":"VN"}
dic1.update(dic2)
print(dic1) # {'草丛伦': '大宝剑', '剑圣': '易大师', '维恩': 'VN', '易大师': '剑圣', '剑豪': '压缩'}
3. dic.clear():
清空字典。
dic = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
dic.clear()
print(dic) # {} 清除之后是一个空字典
4.查询
1. 通过for循环来查。默认查询出来的是值:
dic = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
for i in dic:
print(i) # 剑豪 草丛伦 易大师
2. dic.setdefault(key):
根据传递的字典中的键,进行查询。
如果在字典中存在查询的键,那么返回这个键对应的值;
如果在字典中不存在查询的键,那么返回None
dic3 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
print(dic3.setdefault("剑豪")) # 压缩
print(dic3.setdefault("影流之主") # None
3. 通过键值来查询:
类似于字符串或是列表中的切片取值。根据传递的键名,来取键对应的值。
注意:如果要取的键在字典中不存在,那么会抛出异常。
dic3 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
print(dic3["易大师"]) # 剑圣
4. dict.get(key[,index]):
参数解析:
key:传入的某个键名。
index:可选参数,如果获取的键不在字典中,那么返回index。
该方法如果查询到键在字典中存在,那么会返回键对应的值;如果键不存在字典中,那么返回None,或者返回传入的返回值index。
dic3 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
print(dic3.get("易大师")) # 剑圣
print(dic3.get("易大师傅","没有这个键")) # 没有这个键
2.字典的操作
1. dict.keys()
获取字典中的全部键。返回的是一个由字典中的全部键组成的列表。
dic4 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"
print(dic4.keys()) # dict_keys(['易大师', '草丛伦', '剑豪']) 这个列表也是可以进行迭代的。
2. dict.values()
获取字典中的全部value
,返回由这些value
组成的一个高仿列表。
dic4 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
# 获取全部的值
print(dic4.values()) # dict_values(['压缩', '大宝剑', '剑圣'])
3. dict.items()
获取的是字典中每一个键值对所组成的元组。该方法通常用来进行对字典数据的解包。
dic4 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
print(dic4.items()) # dict_items([('草丛伦', '大宝剑'), ('易大师', '剑圣'), ('剑豪', '压缩')])
dic4 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
# 解构
for a,b in dic4.items():
print(key, value)
# Tom
# 易大师 剑圣
# 剑豪 压缩
# 草丛伦 大宝剑
# 姓名 Tom
字典练习
# 1. 将字符串转化为对应的字典:"易大师:剑圣|剑豪:压缩|草丛伦:大宝剑"
s = "易大师:剑圣|剑豪:压缩|草丛伦:大宝剑"
# 1.先将字符串用"|"分割
new_s = s.split("|")
print(new_s)
dic = {}
# 2.对分割出来的字符串进行循环,并使用解构将其中的数据分别解析出来并赋值
for i in new_s:
# 3.再次进行分割
k,v = i.split(":")
# 4.赋值给字典中的键值
dic[k] = v
print(dic) # {'剑豪': '压缩', '草丛伦': '大宝剑', '易大师': '剑圣'}
# 2. 一个列表,将其中大于66的值添加到字典中k1键中的值,将小于66的数据添加到字典中k2的值
list = [11,22,33,44,55,66,77,88,99]
dic1 = {"k1":[],"k2":[]}
for i in list:
if i == 66:
continue
elif i > 66:
dic1.gete("k1").append(i) # 查询出k1键对应的值,并向其中添加内容
elif i < 66:
dic1.get("k2").append(i)
print(dic1) # {'k2': [11, 22, 33, 44, 55], 'k1': [77, 88, 99]}
# 3. 电影投票:给每个电影进行投票,最后以字典的形式显示出来
pitcure_list = ["解决吾先生","美国往事","西西里的美丽传说","变形金刚"]
dic2 = {}
for film in pitcure_list:
fen = input("请给'{}'打分:".format(film))
dic2[film] = fen
print(dic2) # {'变形金刚': '8', '西西里的美丽传说': '7', '解决吾先生': '5', '美国往事': '6'}
# 4. 车牌区域匹配:根据车牌信息,分析各省的车牌数量
cars = ["豫A12345","豫B12345","豫A12346","沪A12345","沪B12345","黑A12345"]
locals = {"豫":"河南","沪":"上海","黑":"黑龙江"}
result = {}
for car in cars:
province_Abbreviation = car[0] # 省份缩写
# print(province_Abbreviation)
province = locals[province_Abbreviation] # 省份
if result.get(province) == None:
result[province] = 1
else:
result[province] += 1
print(result) # {'上海': 2, '河南': 3, '黑龙江': 1}