# 字典找位置 用键, 列表、元组找位置 用索引
'''
1.有如下变量(tu是个元祖),请实现要求的功能
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44])
a. 讲述元祖的特性
b. 请问tu变量中的第⼀个元素 "alex" 是否可被修改?
c. 请问tu变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在
其中添加⼀个元素 "Seven"
d. 请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其
中添加⼀个元素 "Seven" 答:不能被修改 元组(1,2,3)
'''
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#1 元组 print('元组的特性是不可修改的数据类型,用小括号表示,可以存储多种类型') tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44]) print(type(tu)) # tu[0] = '1' #'tuple' object does not support item assignment # print(tu) tu[1][2]['k2'] = 'Seven' print(tu[1][2]['k2']) print(type(tu[1][2]['k2'])) print(tu) #都是键 的位置 可以改为 变量 # tu[1][2]['k3'] = (11,22,33,'Seven') # 添加 # tu[1][2].setdefault('k3','') print(tu[1][2]['k3']) print(tu) # tu[1][2][]
'''
2.字典dic,dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
1. 请循环输出所有的key
2. 请循环输出所有的value
c. 请循环输出所有的key和value
d. 请在字典中添加⼀个键值对,"k4": "v4",输出添加后的字典
e. 请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典
f. 请在k3对应的值中追加⼀个元素 44,输出修改后的字典
g. 请在k3对应的值的第 1 个位置插⼊个元素 18,输出修改后的字典'''
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]} for key in dic.keys(): print(key) for value in dic.values(): print(value) for key,value in dic.items(): print(key,": ",value) dic.setdefault('k4','v4') print(dic) dic['k1'] = 'alex' print(dic) # 对列表进行操作 dic['k3'].append(44) print(dic) dic['k3'].insert(0,18) print(dic)
3. a,给此 ["很多免费的,世界最⼤的","质量⼀般"]列表第⼆个位置插⼊⼀个 元素:'量很
⼤'。
b,将此 ["质量很⾼,真的很⾼","全部收费,屌丝请绕过"]列表的 "全部收费,屌丝请绕过"
删除。
c,将此["质量怎样不清楚,个⼈已经不喜欢⽇韩范了","verygood"]列表的
"verygood"全部 变成⼤写。
d,给 '⼤陆' 对应的字典添加⼀个键值对 '1048' :['⼀天就封了']
e,"oldboy.com": ["多是⾃拍,⾼质量图⽚很多","资源不多,更新慢"]
f,给此["全部免费,真好,好⼈⼀⽣平安","服务器在国外,慢"]列表的第⼀个元素,加上
⼀句话:'可以爬下来''' 答:
av_catalog = {
'欧美':{}
'大陆':{}
'日韩':{}
}
f.字符串 拼接 位置 = 位置(其实是一个数据类型) + ‘可以爬下来’
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
av_catalog = { "欧美":{ "www.太⽩.com": ["很多免费的,世界最⼤的","质量⼀般"], "www.alex.com": ["很多免费的,也很⼤","质量⽐yourporn⾼点"], "oldboy.com": ["多是⾃拍,⾼质量图⽚很多","资源不多,更新慢"], "hao222.com":["质量很⾼,真的很⾼","全部收费,屌丝请绕过"] }, "⽇韩":{ "tokyo-hot":["质量怎样不清楚,个⼈已经不喜欢⽇韩范了","verygood"] }, "⼤陆":{ "1024":["全部免费,真好,好⼈⼀⽣平安","服务器在国外,慢"] } } av_catalog['欧美']["www.太⽩.com"].insert(1,'量很⼤') print(av_catalog) # av_catalog['欧美'].popitem("hao222.com") # 方法删除的是键值对 av_catalog['欧美']["hao222.com"].remove('全部收费,屌丝请绕过') # 根据元素的只能是 remove # del av_catalog['欧美']["hao222.com"][0] #也可以根据索引 pop 和 del av_catalog['欧美']["hao222.com"].pop(0) #也可以根据索引 pop 和 del # 格式一点都不一样。 print(av_catalog) print(av_catalog['⽇韩']["tokyo-hot"][1].title()) # 该列表 用 序列【1】 而不是 元素 # print(av_catalog) av_catalog['⼤陆'].setdefault('1028',['⼀天就封了']) print(av_catalog) av_catalog['⼤陆']['1024'][0]='全部免费,真好,好⼈⼀⽣平安,可以爬下来' print(av_catalog)
'''
4.有字符串"k: 1|k1 :2|k2:3 |k3 :4" 处理成字典 {'k':1,'k1':2....} ( '''(升级题 面试题)
分别赋值:
kay , value = item ----------> k1 1
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
s = "k: 1|k1 :2|k2:3 |k3 :4" ss = s.split('|') # ['k: 1', 'k1 :2', 'k2:3 ', 'k3 :4'] # ss = s.split(':') print(ss) dic={} for flag in ss: s1 = flag.split(':') # print(s1) dic.setdefault(s1[0]) # 添加键 dic[s1[0]] =s1[1] #添加值 # print(flag) print(dic) #{'k': ' 1', 'k1 ': '2', 'k2': '3 ', 'k3 ': '4'}
'''
5.元素分类
有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有⼤于 66 的值保存⾄字典的
第⼀个key中,将⼩于 66 的值保存⾄第⼆个key的值中。
即: {'k1': ⼤于66的所有值列表, 'k2': ⼩于66的所有值列表}'''
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
li= [11,22,33,44,55,66,77,88,99,90] dic = {'k1':[],'k2':[]} for l in li: # print(l) # print(type(l)) if l > 66: dic['k1'].append(l) if l < 66: dic['k2'].append(l) print(dic)
'''
6.输出商品列表,⽤户输⼊序号,显示⽤户选中的商品
商品列表:
goods = [{"name": "电脑", "price": 1999},
{"name": "⿏标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美⼥", "price": 998}, ]
要求:
1:⻚⾯显示 序号 + 商品名称 + 商品价格,如:
1 电脑 1999
2 ⿏标 10
…
2:⽤户输⼊选择的商品序号,然后打印商品名称及商品价格
3:如果⽤户输⼊的商品序号有误,则提示输⼊有误,并重新输⼊。 # 输入有英文 别的 没做处理
4:⽤户输⼊Q或者q,退出程序。'''
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
goods = [{"name": "电脑", "price": 1999}, {"name": "⿏标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美⼥", "price": 998}, ] i = 0 for i in range(len(goods)): i+=1 print(i,goods[i-1]['name'],goods[i-1]['price']) while True: number = input('请输入商品序号:(输入q/Q退出)').strip() if number == 'q': quit() else: number = int(number) # print(i) if number == 1: print(goods[0]['name'],goods[0]['price']) elif number == 2: print(goods[1]['name'],goods[1]['price']) elif number == 3: print(goods[2]['name'],goods[2]['price']) elif number == 4: print(goods[3]['name'],goods[3]['price']) else: print('输入不符合规则!!!!!!')
流畅的代码(老师讲)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
goods = [{"name": "电脑", "price": 1999}, {"name": "⿏标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美⼥", "price": 998}, ] i = 0 for i in range(len(goods)): i+=1 print(i,goods[i-1]['name'],goods[i-1]['price']) # while True: while 1: # while 1 比while true 执行快 number = input('请输入商品序号:(输入q/Q退出)').strip() if number.isdigit(): #考虑英文和其它字符 number = int(number) if 0 < number <=len(goods): # 厉害了 不是指定值 而是根据程序 print(goods[number-1]['name'], goods[number-1]['price']) else: print('你输入的超出范围,请重新输入') elif number.lower() == 'q': #怎么没考虑 大写 没加 lower quit() else: print('输入不符合规则!!!!!!')