3.7字典:dict+菜中菜
1.简介
无序,可修改,用于存储数据,大量,比列表快,将数据和数据之间关联
定义:dict1 = {'cx':10,'liwenhu':80,'zhangyu':50}
逗号分割的是一个元素,'cx'(键):10(值) -- 键值对
字典的键:要使用不可变数据类型(可哈希)。要求键唯一,如果有重复的,后面的会将前面的覆盖。
可哈希的 -- 不可变的数据类型 - 避免哈希冲突使用了开放寻址法
不可哈希的 -- 可变的数据类型
字典的值可以任意。
2.字典的使用
1.增:
- 直增:dict1['li'] = 89
- dict1.setdefault('liw',100)#此方法按键去查字典是否有对应的键值对,如果没有,执行添加,如果有,则不添加,有返回值,原字典有,则返回值,没有返回None
dict1 = {'cx':10,'liwenhu':80,'zhangyu':50}
#1
dict1['li'] = 89
print(dict1)
#2
print(dict1.setdefault('liw'))
dict1.setdefault('liw',100)
print(dict1.setdefault('liw',100))
print(dict1)
2.删:
-
del dict1['cx'] :通过查找字典的键删除键值对,如果没有会报错。
-
dict1.pop('cx'):通过字典的键删除键值对,返回被删除值
-
dict1.clear():清空
dict1 = {'cx':10,'liwenhu':80,'zhangyu':50,'wu':20} #1 del dict1['cx'] print(dict1) #2 dict1.pop('wu') print(dict1.pop('wu')) print(dict1) #3 dict1.clear() print(dict1)
3.改:
-
dict1['cx'] = 'dsb' 通过键,如果原字典中没有此键对应的键值对,就是添加,如果有,就是修改
-
dict1.update(dict2) :update括号中的字典级别高于前边的字典(括号中放的是要跟新的字典)
dict1 = {'cx':10,'liwenhu':80,'zhangyu':50} #2 dict2.update(dict1) print(dict2)
4.查:
-
for 循环,获取的是键。
-
dict1.get('cx') :通过键获取值,如果没有会返回None
-
dict1['cx'] :通过键获取值,如果没有会报错。
dict1 = {'cx':10,'liwenhu':80,'zhangyu':50} #1 for i in dict1: print(i) #2 print(dict1.get('cx')) #3 print(dict1['cx'])
5.字典的嵌套:
dic = {1001:["周杰伦","林俊杰"],
1002:{"汪峰":{"前妻1":["大烧饼"],"前妻2":["熊大","熊二"],"国际章":"肉丝"}},
1003:{"陈冠希":["阿娇","阿萨","张柏芝"]},
1004:{"韦小宝":[{"教主夫人":["教主"]},
{"阿珂":"刺客"},
{"双儿":"天地会"},
{"爱心觉罗建宁":"公主"},
{"独臂神尼":{"韦小宝师父":{"兰陵王":"隐身"},"花木兰":[
"唧唧复唧唧","木兰是战士",{"爸爸":["花和尚"]}]
}},
{"陈圆圆":"丈母娘"},{"穆建平":"小郡主"}]},
1005:{"常鑫":["大黑哥","大烧饼","吃大煎饼","肉夹馍","自行车","井盖",]}
}
# print(dic)
# print(dic[1004]["韦小宝"][0]["教主夫人"][0])
# print(dic[1005]["常鑫"][-1])
# print(dic[1002]["汪峰"]["前妻2"][-1])
# print(dic[1004]["韦小宝"][4]["独臂神尼"]["韦小宝师父"]["兰陵王"])
# print(dic[1004]["韦小宝"][4]["独臂神尼"]["花木兰"][2]["爸爸"][0])
3.菜中菜:
1.高仿列表:
- dict1.keys():获取字典中所有的键
- dict1.vlaues():获取字典中所有的值
- dict1.items():获取字典中所有的键和值(键值对)
2.解构:
解构示意图:
a = 10
b = 12
a,b = b,a
dict1 = {'cx':10,'liwenhu':80,'zhangyu':50}
#1.键值对输出
for i in dict1:
print(i,dict1.get(i))
print(dict1.keys())#2.高仿列表 ,支持for循环,不支持索引-- 结果:ict_keys([True, 'zhangyu', 'cx', 'liwenhu'])
for i in dict1.keys():
print(i)
#print(dict1.keys()[0])
#3.dict1.values(),获取所有的值(可以转列表)
print(dict1.values())
print(list(dict1.values()))
#4.dict1.items():获取键值对
for i in dict1.items():
print(i)
##解构
for i,j in dict1.items():#解构输出键值对
print(i,j)
#5.解构。
a,b = 10 ,12
print(a)
print(b)
a = 10
b = 12
a,b = b,a
print(a)
print(b)
a,b = [1,2]
print(a,b)
a,_,b = (3.4.5)#'_'无用,只为将不要的4赋值进去
print(a,b)#等号后边的值与前边的变量数要一致
a = 10,12
print(a)#a是一个元组
a,b ={'1':'a','2':b}
print(a,b)#取到的是键