字典、字典嵌套
1、字典是python中的数据类型之一、唯一一种大括号{}键值对的数据。
2、存储大量的数据、将数据和数据之间进行关联。
3、通过键可以准确的找到值
4、哈希:可变数据类型就不可哈希
不可变数据类型可哈希
5、字典的键要求:不可变数据类型(可哈希)、唯一(字典中键只能存在一个)
字典的值:任意、重复的话后面的值会覆盖前面的值。
6、字典的增:
dic["键"] = "值"
setdefault("meet",18) 参数1:键 参数2:值、字典中键不存在时添加、存在时不进行添加、
1、先通过键去字典中查找、返回的值是None、才会执行第二步。
2、将键和值添加到字典中。
3、键存在时返回键对应的值
4、键和值添加成功后返回的是添加的值
7、字典的删除:
clear()--清空
pop()删除加参数字典的键、有返回值、返回的是被删除的键对应的值
popitem python3版本中随机删除最后一个
del dic 删除整个字典、加参数写法:del dic["键"]
字典中没有remove
8、字典的修改:
dic["键"] = "值" #暴力增加:当键在字典中存在时就修改、不存在时增加
dic.update(字典)#update中的字典级别高于点前面的字典
9、字典的查:通过键查找值(暴力查找)、键存在时返回键对应的值、键不存在时就报错。
print(dic.get["key","没有找到啊"]) #通过键查找值、存在时返回键对应的值、不存在时返回None、通过get可以自定义返回值/内容。
print(dic.keys()) #keys获取字典中所有的键、高仿列表可以for循环、但是不能通过索引取值、高仿列表可以迭代。
print(dic.values()) #获取字典中所有的值
print(dic.items())
print(setdefault(键))
10、解构:字典是无序的、python3.6版本以上显示时按照定义顺序去显示。
字典用list转成列表去进行索引查找
items()获取字典中所有的键值以元组的形式
解构一:
a,b = 1020
print(a)
print(b)
解构图解:
a = 10
b = 20
a,b = b,a
解构二:
a,b = "你好"
print(a)
print(b)
11、聚合:
a,b,*c = [1,2,3,4,5,6,7]
print(a,b)
12、字典的嵌套:查找时通过键进行查找、一层一层查找。
13、字典和列表的区别:字典查找顺序是方便、字典查找速度快。
作业题:
#14、请将列表中的每个元素通过 "_" 链接起来。
users = ['西游记','红楼梦','三国演义']
print("_".join(users))
#15、请将列表中的每个元素通过 "_" 链接起来。
users = ['秀色可餐','岳新力',666,'孙一帆']
users[2] = str(users[2])
print("_".join(users))
#16、请将元组 v1 = (11,22,33) 中的所有元素追加到列表 v2 = [44,55,66] 中。
v1 = (11,22,33)
v2 = [44,55,66]
v2.extend(v1)
print(v2)
#17、请将元组 v1 = (11,22,33,44,55,66,77,88,99) 中的所有偶数索引位置的元素 追加到列表v3 = [44,55,66]
#for循环添加
v1 = [11,22,33,44,55,66,77,88,99]
v3 = [44,55,66]
for i in v1:
if v1.index(i) % 2 == 0:
v3.append(i)
print(v3)
# extend添加
v3.extend(v1[::2])
print(v3)
#18、将字典的键和值分别追加到 key_list 和 value_list 两个列表中,如:
info = {'k1':'v1','k2':'v2','k3':'v3'}
key_list = []
value_list = []
for k,v in info.items():
key_list.append(k)
value_list.append(v)
print(key_list)
print(value_list)
#19、字典dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
# a. 请循环输出所有的key
for k,v in dic.items():
print(k)
# b. 请循环输出所有的value
for k,v in dic.items():
print(v)
# c. 请循环输出所有的key和value
for i in dic.items():
print(i)
# d. 请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
dic["k4"] = "v4"
print(dic)
# e. 请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典
dic["k1"] = "alex"
print(dic)
# f. 请在k3对应的值中追加一个元素 44,输出修改后的字典
dic["k3"].append("44")
print(dic)
# g. 请在k3对应的值的第 1 个位置插入1个元素 18,输出修改后的字典
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
dic["k3"].insert(1,18)
print(dic)
#20、有如下字典,请按照以下的需求对字典进行操作
av_catalog = {
"欧美":{
"www.宝元.com": ["很多免费的,世界最大的","质量一般"],
"www.alex.com": ["很多免费的,也很大","质量挺好"],
"oldboy.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
"hao222.com":["质量很高,真的很高","全部收费,屌丝请绕过"]
},
"日韩":{
"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]
},
"大陆":{
"1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
}
}
# a.给此 ["很多免费的,世界最大的","质量一般"]列表第二个位置插入一个元素:'量很大'。
av_catalog["欧美"]["www.宝元.com"].insert(2,"量很大")
print("插入一个元素",av_catalog)
# b.将此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表的 "全部收费,屌丝请绕过" 删除。
av_catalog["欧美"]["hao222.com"].pop(1)
print("删除",av_catalog)
# c.将此["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]列表的 "verygood"全部变成大写。
av_catalog["日韩"]["tokyo-hot"][1] = av_catalog["日韩"]["tokyo-hot"][1].upper()
print("全部变成大写",av_catalog)
# d.给 '大陆' 对应的字典添加一个键值对 '1048' :['一天就封了']
av_catalog["大陆"][1048] = ['一天就封了']
print("添加键值对一天就封了",av_catalog)
# e.删除这个键值对:"oldboy.com": ["多是自拍,高质量图片很多","资源不多,更新慢"]
av_catalog["欧美"].pop("oldboy.com")
print("删除键值对oldboy.com",av_catalog)
# f.给此["全部免费,真好,好人一生平安","服务器在国外,慢"]列表的第一个元素对应的字符串,加上一句话:'可以爬下来'
av_catalog["大陆"]["1024"][0] = av_catalog["大陆"]["1024"][0] + "可以爬下来"
print("可以爬下来",av_catalog)
#21、请循环打印k2对应的值中的每个元素。
info = {'k1':'v1','k2':[('alex'),('wupeiqi'),('oldboy')],}
info = {'k1':'v1','k2':[('alex'),('wupeiqi'),('oldboy')],}
for i in info["k2"]:
print(i)
#22、有字符串"k: 1|k1:2|k2:3 |k3 :4" 处理成字典 {'k':1,'k1':2,'k3':4}
s = "k : 1 | k1 : 2 | k2 : 3| k3 : 4"
dic = {}
for i in s.replace(" ","").split("|"):
k,v = i.split(":")
dic[k] = v
print(dic)
# 23、有如下值 li= [11,22,33,44,55,77,88,99,90] ,将所有大于 66 的值保存至字典的第一个key对应的列表中,将小于 66 的值保存至第二个key对应的列表中。result = {'k1':[],'k2':[]}
result = {'k1':[],'k2':[]}
li = [11,22,33,44,55,77,88,99,90]
for i in li:
if i > 66:
result["k1"].append(i)
else:
result["k2"].append(i)
print(result)
# 24、看代码写结果
v = {}
for index in range(10):
v['users'] = index
print(v)
#结果:{'users': 9}
#25、输出商品列表,用户输入序号,显示用户选中的商品
"""
# 商品列表:
# goods = [
# {"name": "电脑", "price": 1999},
# {"name": "鼠标", "price": 10},
# {"name": "游艇", "price": 20},
# {"name": "美女", "price": 998}
# ]
# 要求:
# 1:页面显示 序号 + 商品名称 + 商品价格,如:
# 1 电脑 1999
# 2 鼠标 10
# ...
# 2:用户输入选择的商品序号,然后打印商品名称及商品价格
# 3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。
# 4:用户输入Q或者q,退出程序。
"""
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998}
] #1、首先把商品放在货架上
shopping_car = {} #15、接下来设置购物车空字典
print('欢迎光临!') #2、接下来有个欢迎的语句
while True: #23、加不断的循环
money = input('让我看看你的钱输入Q或者q,退出程序:').strip() #3、接下来定义钱并点strip下去除空白
if money.isdigit() and int(money) > 0: #4、接下来判断钱是数字还是字母是否大于0
while True: #20、再加下不断循环
for i,k in enumerate(goods): #5、接下来循环货架用到枚举、循环货架里面的所有商品以及价格
print('序号{},商品{},价格{}'.format(i + 1,k['name'],k['price'])) #6、接下来用到字符串拼接、
choose = input('请输入你要购买的商品序号:') #7、接下来设置买家购买的序号
if choose.isdigit() and int(choose) < len(goods): #8、接下来判断输入的商品序号,
num = input('你要购买的商品数量') #10、接下来设置输入的商品数量
if num.isdigit(): #11、再接着判断数量是数字
if int(money) > goods[int(choose)]['price'] * int(num): #12、接下来判断钱是否够购买东西
money = int(money) - goods[int(choose)]['price'] * int(num) #13、这一步是剩余的钱等于总共的钱减去已经购买的商品价格乘以数量
if goods[int(choose)]['name'] in shopping_car: #16、接下来判断购买的商品是否在购物车里面
shopping_car[goods[int(choose)]['name']] = shopping_car[goods[int(choose)]['name']] + int(num)#18、购买的商品名字等于
else:
shopping_car[goods[int(choose)]['name']] = int(num) #17、否则回调不在的话选择的名字等于选择的数量
print('购物车中的商品有{},你的余额有{}'.format(shopping_car,money))#19、最后再告诉下购物车中的状况
else:
print('钱不够,回去') #14、设置钱不够的结果
break #20、加下中断
else:
print('输入序号有误,请重新输入,') #9、回调出否则的结果
if money.upper() == "Q": #21、如果是Q就退出
break
else: #22、打印输入有误的
print("输入有误:")