字典的增删查改
字典
字典是无序的,不可变数据类型
定义: 用于存储数据,存储大量数据 字典要比列表快,将数据和数据之间进行关联
定义一个字典
dic = {"常鑫":10,"李文虎":80,"张宇":90,10:"大黑哥"}
字典中逗号分隔是一个元素 "常鑫" (键) : 10 (值) 键值对应
字典的键
- 必须是可哈希的—— 不可变的数据类型(列表不可以)——避免哈希冲突,使用了开放寻址法
2.不可哈希———可变的数据类型
3.要求唯一,如果有重复的后面的将前面的值覆盖
-
字典的值可以任意
增
(通过键去查)
1.暴力添加
dic = {"有":[1,2,3]}
dic["李文虎"] = 89 结果:{'有': [1, 2, 3], '李文虎': 89}
- 李文虎这个键去字典进行查询,如果不存在执行添加,如果存在就不添加了
有:
dic = {"有":[1,2,3],"李文虎":89}
dic.setdefault("李文虎",100) 结果: dic = {"有":[1,2,3],"李文虎":89}
没有:
dic = {"有":[1,2,3],}
dic.setdefault("李文虎",100) 结果:{'有': [1, 2, 3], '李文虎': 100}
- dic.setdefault()
dic = {"有":[1,2,3],"李文虎":89}
print(dic.setdefault("李文虎"))
#结果 89
只有两种格式
还有 None
print(dic.setdefault("张宇")
# None
删除
通过字典 的键删除值对
- del dic["键"]
dic = {"有":[1,2,3],"李文虎":89}
del dic["有"]
print(dic)
#结果 {'李文虎': 89}
-
dic.pop("键")
dic = {"有":[1,2,3],"李文虎":89} dic.pop("有") print(dic) # 结果 {'李文虎': 89}
dic.clear
dic = {"有":[1,2,3],"李文虎":89}
dic.clear()
print(dic)
# {}
改
当键在字典中存在就是修改(暴力修改)
dic = {"有":[1,2,3],"李文虎":89}
dic["有"] = "dsb"
print(dic)
# {'有': 'dsb', '李文虎': 89}
字典中没有某个键时就是添加
dic = {"有":[1,2,3],"李文虎":89}
dic["无"] = "dsb"
print(dic)
# {'有': [1, 2, 3], '李文虎': 89, '无': 'dsb'}
dic.update("要更新的字典")
括号里的级别高于 update 前面的字典 更新顾名思义就是将补充的填充到原来上面
D = {'one': 1, 'two': 2}
D.update({'three': 3, 'four': 4}) # 传一个字典
print(D)
D.update([('seven', 7), ('eight', 8)]) # 传一个包含一个或多个元祖的列表
print(D)
#{'one': 1, 'two': 2, 'three': 3, 'four': 4}
{'one': 1, 'two': 2, 'three': 3, 'four': 4, 'seven': 7, 'eight': 8}
查
-
利用 for 循环 (循环获取的每个字典中对应的键)
-
dic = {"有":[1,2,3],"李文虎":89} for i in dic: print(i) # 有 李文虎
dic.get()
dic = {"有":[1,2,3],"李文虎":89}
print(dic.get("李文虎")) #通过键获取值,存在返回键中对应的值
# 89
dic = {"有":[1,2,3],"李文虎":89}
print(dic.get("无")) #不存在返回 None
# None
dic.get[]
存在的话和上面的()一样,如果不存在就会报错
其他操作
dic.keys() 获取所有键,存放在高仿列表中,支持 for 循环,不支持索引.
dic = {"有":[1,2,3],"李文虎":89}
print(dic.keys())
# 结果: dict_keys(['有', '李文虎'])
支持 for 循环
dic = {"有":[1,2,3],"李文虎":89}
for i in dic.keys():
print(i)
结果:
有
李文虎 类似于输出列表中的元素, 字典也可以
不支持索引 直接报错
dic = {"有":[1,2,3],"李文虎":89}
print(dic.keys()[0])
结果报错
dic.values() 获取字典中所有的值
dic = {"有":[1,2,3],"李文虎":89}
print(dic.values())
#dict_values([[1, 2, 3], 89])
dic.items() 获取字典中所有键和值
dic = {"有":[1,2,3],"李文虎":89}
print(dic.items())
#dict_items([('有', [1, 2, 3]), ('李文虎', 89)])
解构
a,b = 10,12
print(a)
print(b) #相当于一个元组
#
10
12
a = 10
b = 20
a,b = b,a
print(a)
print(b)
#
20
10
列表
a, b = [1,2]
print(a)
print(b)
#
1
2
元组
a, b = (1,2)
print(a)
print(b) #等号前面的值要和等号后面的变量名要一一对应,不能多也不能少
#
1
2
字典
a,b = {"1":"a","2":"b"}
print(a)
print(b)
#
1
2
dic = {"1":"a","2":"b"}
for k,v in dic.items():
print(k,v)
#1 a
2 b 循环获取字典中的每一个键和值
字典的嵌套
通过键一步一步查询
dic = {1001:["周杰伦","林俊杰"],
1002:{"汪峰":{"前妻1":["大烧饼"],"前妻2":["熊大","熊二"],"国际章":"肉丝"}},
1003:{"陈冠希":["阿娇","阿萨","张柏芝"]},
1004:{"韦小宝":[{"教主夫人":["教主"]},
{"阿珂":"刺客"},
{"双儿":"天地会"},
{"爱心觉罗建宁":"公主"},
{"独臂神尼":{"韦小宝师父":{"兰陵王":"隐身"},"花木兰":[
"唧唧复唧唧","木兰是战士",{"爸爸":["花和尚"]}]
}},
{"陈圆圆":"丈母娘"},{"穆建平":"小郡主"}]},
1005:{"常鑫":["大黑哥","大烧饼","吃大煎饼","肉夹馍","自行车","井盖",]}
}
print(dic[1005]["常鑫"][-1])
print(dic[1002]["汪峰"]["前妻2"][-1])
print(dic[1004]["韦小宝"][4]["独臂神尼"]["韦小宝师父"]["兰陵王"])
print(dic[1004]["韦小宝"][4]["独臂神尼"]["花木兰"][2]["爸爸"][0])
#
井盖
熊二
隐身
花和尚