今日大纲:

1.什么是字典

  字典是以key:value的形式来保存数据,用{}表示. 存储的是key:value

2.字典的增删改查(重点)

  (1) 添加
    dic[新key] = 值

    setdefault()
  (2)删除
    pop(key)

    del dict[key]

    popitem()

    clear()

  (3)修改
    dic[老key] = 新值
    d1.update(d2)   把d2的键值对更新到d1中
  (4)查询
    dic[key]
    get(key, 值)   #推荐用法
    setdefault(key, value)
  (5) 遍历,字典是一个可迭代对象

3.字典的相关操作

  (1) keys()   获取到所有的键的集合(高仿列表)
  (2) values()  获取到所有的值的集合
  (3)items()   拿到所有的键值对  元组形式

  (4)解构:

  a,b=(1,2)

  a,b=1,2

4.字典的嵌套

  字典的嵌套. 字典套字典

5.集合(非重点),核心功能:去重复

DAY5-基本数据类型(dict&set)

本节主要内容:

1.字典的简单介绍

2.字典的增删改查及其他操作

3.字典的遍历

4.字典的嵌套

5.set集合

一.字典的简单介绍

  字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成. 在唯⼀的. 在保存的时候, 根据key来计算出⼀个内存地址. 然后将key-value保存这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须如果你搞不懂什么是可哈希, 暂时可以这样记, 可以改变的都是不可哈希的, 那么可哈希就一位这不可变,这个是 这个是为了能准确的计算内存地址而规定的.

已知的可哈希(不可变)的数据类型: int, str, tuple, bool
不可哈希(可变)的数据类型: list, dict, set

语法 :
{key1: value1, key2: value2....}
注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据.

dic={}
print(type(dic)) #<class 'dict'>
(1)#查找,通过列表引入字典
lst=['周杰伦','林俊杰','蔡依林'] #lst[0]
总结:字典是自定义下标的列表 dic={'jay':'周杰伦','jj':'林俊杰','jolin':'蔡依林'}
print(dic['jay']) #查找 周杰伦
(2)修改
dic={'jay':'周杰伦','jj':'林俊杰','jolin':'蔡依林'}
dic['jay']='马化腾' #修改键jay对应的值
print(dic) #结果{'jay': '马化腾', 'jj': '林俊杰', 'jolin': '蔡依林'}
(3)应用,
在手机袋子的查找手机,通过标签寻找
'''
字典的查找效率比较高
坑: a.字典存储数据的时候是用hash值来存储的,知道hash是个NB的算法就行了
b.算法不能变(python的),数据必须是不可变的(可哈希)
算法对应相同的值,对于结果
对'键'进行运算,计算出一个值来,下次再算,下次还是这个值
'''
(4)
总结:
  列表是可变的,不可哈希的
  元组是不可变的,可哈希的
  字典的键必须是可哈希的
  print(hash(123)) #结果产生的hash值:123
  print(hash('胡辣汤'))
  print((1,2,3))
(5)
dic={'jay':'周杰伦','王力宏':['龙的传人','唯一','改变自己'],['战狼','战狼2']:'武警'}
print(dic)
结果报错:TypeError: unhashable type: 'list'
总结字典不能作为"键

dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序不是连续的. 所以不能进⾏切片⼯作. 它只能通过key来获取dict中的数据

二.字典的增删改查及其他操作

(1)
增加 dic[新键]=新值
dic[老键]=新值
dic={'意大利':'李云龙','美国':'美国往事'}
dic['日本']='东京审判' #新key表示添加
dic['韩国']='釜山行'
dic['美国']="华尔街之狼" #更新
print(dic) 增加 setdefault(难点)
总结:
  有添加的功能,如果key是存在的,不添加
  流程:判断你给的key是否在字典中存在了,如果已经存在了,则不再新增,不存在,则添加
dic={'意大利':'李云龙','美国':'美国往事'}
dic.setdefault('印度') #只有键,值显示 None
print(dic) #结果:{'意大利': '李云龙', '美国': '美国往事', '印度': None} dic.setdefault('印度','三傻大闹宝莱坞') #即使是空值也不重新赋值
print(dic) #结果:{'意大利': '李云龙', '美国': '美国往事', '印度': None} dic.setdefault('美国','三傻大闹宝莱坞')
print(dic) #结果:{'意大利': '李云龙', '美国': '美国往事', '印度': None}
总结:即使一用setdefault开始创建没有添加值,利用setdefault再次添加也不会更新新的值.
(2)删除 pop/popitem/del/clear
dic={'张艺谋':'红高粱','李安':'断背山','陈凯歌':'霸王别姬','郭德纲':'祖宗十九代'}
方法一
dic.pop('郭德纲') #重点 需要记住的
print(dic) #结果: {'张艺谋': '红高粱', '李安': '断背山', '陈凯歌': '霸王别姬'}
方法二
dic.popitem() #现在python3.6是删除最后一个,python3.5以前随机删除 ,在Python早期,字典的无序的
print(dic) #结果: {'张艺谋': '红高粱', '李安': '断背山'}
方法三
del dic['李安']
print(dic) #结果: {'张艺谋': '红高粱'} dic.clear() #清空
print(dic) #结果: {}
(3)#修改   dic[新键]=新值   update
dic={'河南':'胡辣汤','开封':'灌汤包','武汉':'热干面'}
dic['河南']='烩面' #总结:老key=新值
print(dic) #{'河南': '烩面', '开封': '灌汤包', '武汉': '热干面'} update
dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
dic2={'赵四':'宝宝','刘能':'萌萌','皮校长':'皮长山'}
dic1.update(dic2)
print(dic1) #dic2把dic1更新 结果:{'赵四': '宝宝', '刘能': '萌萌', '王木生': '范伟', '皮校长': '皮长山'}
print(dic2) #dic2不变 结果:{'赵四': '宝宝', '刘能': '萌萌', '皮校长': '皮长山'}
小结:update有相同的键,就把原来的值更新,但是不常用

(4)查找
dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
a. 直接使用key就可以拿到value
dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
print(dic1['赵四']) #结果:刘小光
print(dic1['赵四四']) #KeyError: '赵四四' key不存在 b. get(key)
dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
print(dic1.get('刘能')) #结果:王晓利
print(dic1.get('刘能能')) #结果:None 当key不存在返回None
print(dic1.get('刘能能','没有这个人')) #结果:当key不存在,返回第二个参数,默认第二个参数是None
                        #结果:没有这个人
c.  setdefault()
setdefault() 第一个功能是添加(当key不存在),第二个功能是查询(根据你给的key查询)
整个执行流程:判断给的key是否存在,
如果key存在,就不执行新增流程,直接查询出这个key对应的value
如果key不存在,先执行新增操作,再使用key把对应的value查询出来
例一
  dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
  ret=dic1.setdefault('皮长山','皮校长')
  print(ret) #结果:皮校长 #先找再查 例二
  dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
  ret=dic1.setdefault('王木生','宝宝')
  print(ret) #结果:范伟 #先找再查

三.字典的遍历

(1)for循环遍历字典
A.
dic={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
直接用for循环
for key in dic: #直接循环字典拿到的是key,有key直接拿value
print(key)
print(dic[key]) 结果:
赵四
刘小光
刘能
王晓利
王木生
范伟
B.
dic={'赵四':'刘晓光','刘能':'王晓利','王木生':'范伟'}
直接for循环
for key in dic:     #直接循环字典拿到的是key,有key直接拿value
print(key,dic[key]) #打印出来的是:键和值
结果:
  赵四 刘小光
  刘能 王晓利
  王木生 范伟
(2)
A:
不常用,上边有一个更简单的,直接用dic
dic={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
print(dic.keys()) #dict_keys(['赵四', '刘能', '王木生']) ,像列表,是山寨列表,高仿列表
for el in dic.keys(): #循环,可以获取到每一个key
print(el)
结果:
  赵四
  刘能
  王木生
B:
dic={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
当只需要值的时候
for v in dic.values():
print(v)
结果:
刘小光
王晓利
范伟
C:
dic={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
print(dic.values()) #结果:dict_values(['刘小光', '王晓利', '范伟'])
print(dic.keys()) #结果:dict_keys(['赵四', '刘能', '王木生'])
print(dic.items()) #结果:dict_items([('赵四', '刘小光'), ('刘能', '王晓利'), ('王木生', '范伟')])
D:
dic={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
for item in dic.items():
print(item) #元组类型
k=item[0]
v=item[1]
print(k,v)
结果:
  ('赵四', '刘小光')
   赵四 刘小光
  ('刘能', '王晓利')
刘能 王晓利
('王木生', '范伟')
王木生 范伟
E:
dic={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
for k,v in dic.items():
print(k,v) 结果:
   赵四 刘小光
   刘能 王晓利
   王木生 范伟
(3)
a,b=1,2 #解构,解包
print(a)
print(b) c=1,2,3
print(c)      #1,2,3
print(type(c)) #<class 'tuple'>
d=(1,2,3)  #没有解包,直接创建一个元组
print(d) 支持解包的类型: list,tuple
(4)
遍历字典的最简单的方法(最高效的方法)
#for k,v in dic.items(): dic={'周五':'等着放假','周六':'放假','周日':'等着上课'}
a.直接用for循环遍历字典的key
for k in dic: #k直接拿到的是key
print(k,dic[k]) b.使用dic.items() 解构可以直接拿到k,v,也就是键和值
for k,v in dic.items():
print(k,v)

四.字典的嵌套

题目

wf={
'name':'汪峰',
'age':52,
'hobby':['唱歌','上头条','穿皮库'],
'wife':{
'name':'章子怡',
'age':49,
'hobby':['演戏','上电视','当导师'],
'tishen':{
'name':'萌萌',
'age':28
},
'zhuli':{
'name':'磊磊',
'age':20
}
},
'zhuli':{
'name':'宝宝',
'age':23,
'hobby':['抽烟','喝酒','烫头']
},
'children':[{'name':'汪老大'},{'name':'汪老二'}]
}
练习题:
汪峰第二个孩子的年龄
wf['children'][1]['age']=2
print(wf)
(1)汪峰助理的名字
print(wf['zhuli']['name'])
(2)汪峰老婆的替身的名字
print(wf['wife']['tishen']['name'])
(3)汪峰老婆的第二个爱好
print(wf['wife']['hobby'][1])
(4)汪峰助理的第三个爱好
print(wf['zhuli']['hobby'][2])
(5)给汪峰的助理+10岁 #(两种方法)
wf['zhuli']['age']=wf['zhuli']['age']+10
wf['zhuli']['age']=33
print(wf)
(6)汪峰的老婆添加一个爱好('导戏)
wf['wife']['hobby'].append('导戏')
wf['wife']['hobby'].extend('导戏') #错误方法,这个是迭代添加 '当导师', '导戏', '导', '戏'
print(wf)
(7)删除汪峰助理的'抽烟'爱好 (三种删除方法)
wf['zhuli']['hobby'].remove('抽烟')
wf['zhuli']['hobby'].pop(0) #注意pop指定的是索引
del wf['zhuli']['hobby'][0]
print(wf)

五.set集合

(1)
运行之后,是无序的
  s={'周润发','大润发','王润发','周润发'} #去重,留下不重复的
  print(s)
(2)把列表转化成集合 x 转化成y类型 y()
唯一能用到的点,去重复
lst = ["麻将", "牌九", "骰子", "扑克", "虎机", "骰子", "扑克", "虎机", "扑克", "虎机", "扑克", "虎机"]
s=set(lst)
print(s) #把集合编绘列表
lst=list(s)
print(lst) #顺序是乱的,但是对比它的优点,是可以忽略的
(3)计算机中麻烦的事情
  1.去重 2.排序
(4)
了解 集合的增删改查就行,不需要记忆
可以用石墨文档//印象笔记
A.增加
s={'小米','华为','vivo'}
s.add('oppo') #非要记,就记这个就行了
print(s) s.update('冬瓜') #迭代添加
print(s)
B.删
s={'小米','华为','vivo'}
ret=s.pop() #随机删除一个
print(s) #剩下的集合
print(ret) #删除的元素 s.remove('小米') #指定删除
print(s)
重点记忆:集合和字典,都是没有索引和切片的,因为两者内部都是乱序的
s.clear() #清空
print(s) C.改
修改,先删除,再添加
把小米改成J罗
s={'小米','华为','vivo'}
s.remove('小米')
s.add('J罗')
print(s) for el in s:
print(el) #迭代打印
(5)
数学运算
s1={1,2,3}
s2={1,2,4} 交集 &与字符
print(s1&s2)
print(s1.intersection(s2)) 并集
print(s1|s2)
print(s1.union(s2)) 差集
print(s1-s2) #s1中特有的内容
print(s1.difference(s2)) 反交集
print(s1^s2) #两个集合中特有的内容
print(s1.symmetric_difference(s2))
反交集是什么?
例如:集合A={0,1,2,3},集合B={2,3}
那么集合A和集合B的交集就是{2,3}
集合A和集合B的反交集就是{0,1} (6)
集合本身是可变的数据类型,不可哈希
集合套集合->不能相互嵌套的
集合中的元素必须可哈希(不可变的)
s={123} #<冰雪奇缘>
如果非要集合套集合
s=frozenset({'哈哈','呵呵'}) #不可变的数据类型(集合)
print(s)
验证
for el in s:
print(el)
(7)
关于set集合作业:写一个彩票开奖(36选7)
什么时候够7个就结束
怎么产生随机数 #题目解法答案:
from random import randint
l=set()
# print(type(l)) #查看l的数据类型
for i in range(100):
k=randint(1,36) #randint是在一个自定义范围内产生随机整数,
# print(randint(1,36))
l.add(k)
if len(l)==7:      #生成7个不重复的代码3
     break
print(l,i) #最后显示,添加集合的结果,一共随机了几个数
(8)
预习
深浅拷贝
小数据池;是干嘛的,小数据池存在的意义 文件操作(带来的作业会很多) 开讲-函数:
第一次考试:从开始到文件操作
下周:函数
  f(x)=x+1
f(1)=2
难点:多线程,多线程之后是一马平川
      不只是多线程,还有多进程,单线程,单进程,协程等等

今日作业

# 1,有如下变量(tu是个元祖),请实现要求的功能
# tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])
# a.讲述元祖的特性
'''
不可更改的数据类型,有序
'''
# b.请问tu变量中的第一个元素, "alex",是否可被修改?
'''
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])
tu[0]=1
print(tu)
#TypeError: 'tuple' object does not support item assignment
上边案例说明,tu是不可变数据类型,第一层元素的第一个元素是不可以更改的
#字符串不可变
#元组第一层不可变
''' # c.请问tu变量中的"k2"
# 对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素"Seven"
'''
(1)对应的是列表类型(list)
(2)是可以被修改的
(3)
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])
tu[1][2]['k2'].append('Seven')
print(tu)
''' # d.请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素"Seven" '''
(1)元组
(2)不可以被修改
(3)#强行转也是可以的
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])
tu[1][2]['k3'].append('Seven')
print(tu)
#结果报错:AttributeError: 'tuple' object has no attribute 'append'
''' 2, 字典dic, dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
# a.请循环输出所有的key
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
#方法一
# for i in dic:
# print(i)
#方法二:
# for i in dic.keys():
# print(i)
'''
# b.请循环输出所有的value
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
# 方法一
for i in dic:
print(dic[i])
# 方法二:
for i in dic.keys():
print(dic[i])
'''
# c.请循环输出所有的key和value
'''
#方法一:
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
for i in dic:
print(i,dic[i])
#方法二:
for k,v in dic.items():
print(k,v)
'''
# d.请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
# 方法一:
# dic['k4']='v4'
# print(dic)
#方法二
# dic.setdefault('k4','v4')
# print(dic)
''' # e.请在修改字典中"k1"对应的值为"alex",输出修改后的字典
'''
#方法一:
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic['k1']='alex'
print(dic)
# 方法二
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic1={'k1':'alex'}
dic.update(dic1)
print(dic)
''' # f.请在k3对应的值中追加一个元素44,输出修改后的字典
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic['k3'].append(44)
print(dic)
'''
# g.请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
# dic['k3'].insert(1,'18')
dic['k3'].insert(0,'18')
print(dic)
3,
av_catalog = {
"欧美": {
"www.youporn.com": ["很多免费的,世界最大的", "质量一般"],
"www.pornhub.com": ["很多免费的,也很大", "质量比yourporn高点"],
"letmedothistoyou.com": ["多是自拍,高质量图片很多", "资源不多,更新慢"],
"x-art.com": ["质量很高,真的很高", "全部收费,屌丝请绕过"]
},
"日韩": {
"tokyo-hot": ["质量怎样不清楚,个人已经不喜欢日韩范了", "verygood"]
},
"大陆": {
"": ["全部免费,真好,好人一生平安", "服务器在国外,慢"]
}
}
# a, 给此["很多免费的,世界最大的", "质量一般"]列表第二个位置插入一个元素:'量很大'。
#注意这个插入的方法的应用
av_catalog['欧美']["www.youporn.com"].insert(1,'量很大')
print(av_catalog)
# b, 将此["质量很高,真的很高", "全部收费,屌丝请绕过"]列表的"全部收费,屌丝请绕过"删除。
#方法:del remove pop #方法一
# av_catalog['欧美']["x-art.com"].pop()
# print(av_catalog)
#方法二:
# del av_catalog['欧美']["x-art.com"][1]
# print(av_catalog)
# 方法三:
# av_catalog['欧美']["x-art.com"].pop(1)
# print(av_catalog)
#方法四:
# av_catalog['欧美']["x-art.com"].remove("全部收费,屌丝请绕过")
# print(av_catalog)
'''
# c, 在此["质量很高,真的很高", "全部收费,屌丝请绕过"]列表中添加"金老板最喜欢这个"。
'''
#方法一
# av_catalog['欧美']['x-art.com'].append('金老板最喜欢这个')
# print(av_catalog)
#方法二
# av_catalog['欧美']['x-art.com'].insert(-1,'金老板最喜欢这个')
# print(av_catalog)
'''
# d, 将此["质量怎样不清楚,个人已经不喜欢日韩范了", "verygood"]列表的"verygood"全部变成大写。
'''
#方法一
# av_catalog['日韩']['tokyo-hot'][-1]=av_catalog['日韩']['tokyo-hot'][-1].upper()
# print(av_catalog)
#方法二
# av_catalog['日韩']['tokyo-hot'][-1]=av_catalog['日韩']['tokyo-hot'][-1].swapcase()
# print(av_catalog)
# 方法三
# av_catalog['日韩']['tokyo-hot'][-1]='VERYGOOD'
# print(av_catalog)
#方法四
# av_catalog['日韩']['tokyo-hot'][1]='VERYGOOD'
# print(av_catalog)
'''
# e, 给'大陆'对应的字典添加一个键值对 '1048': ['一天就封了']
'''
#方法一
# av_catalog['大陆']['1048']='一天就封了'
# print(av_catalog)
# 方法二
# av_catalog['大陆'].setdefault('1048','一天就封了')
# print(av_catalog)
'''
# f, 删除此 "letmedothistoyou.com": ["多是自拍,高质量图片很多", "资源不多,更新慢"]键值对。
'''
#pop和del 可以指定删除字典
# 方法一
# av_catalog['欧美'].pop('letmedothistoyou.com')
# print(av_catalog)
#方法二
# del av_catalog['欧美']['letmedothistoyou.com']
# print(av_catalog)
'''
# g, 给此["全部免费,真好,好人一生平安", "服务器在国外,慢"]列表的第一个元素,加上一句话:'可以爬下来'
'''
#方法一;在最前面添加一个元素"可以爬下来"
# av_catalog['大陆']['1024'].insert(0,'可以爬下来')
# print(av_catalog)
#方法二1:#在第一个元素的后面添加
# av_catalog['大陆']['1024'][0]=av_catalog['大陆']['1024'][0]+'可以爬下来'
# print(av_catalog)
#方法二2:
av_catalog['大陆']['1024'][0]='全部免费,真好,好人一生平安可以爬下来'
print(av_catalog)
 4、有字符串
"k:1|k1:2|k2:3|k3:4"
处理成字典
{'k': 1, 'k1': 2....}(升级题)
#方法一:
# dic={}
# s="k:1|k1:2|k2:3|k3:4"
# s=s.split("|")
# print(s)
# for i in s:
# a,b=i.split(':')
# dic[a]=int(b)
# print(dic) #方法二
# dic={}
# s="k:1|k1:2|k2:3|k3:4"
# s=s.split("|")
# print(s)
# for i in s:
# a=i.split(':')
# dic[a[0]]=int(a[1])
# print(dic)
 5、元素分类
有如下值li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90],将所有大于66的值保存至字典的第一个key中,将小于66
的值保存至第二个key的值中。
即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表} 方法一
s={'k1':[],'k2':[]}
li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
for i in li:
if i>66:
s['k1'].append(i)
elif i<66:
s['k2'].append(i)
else:
continue
print(s)
方法二
 s={}
li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
for i in li:
if i>66:
s.setdefault('k1',[]).append(i)
elif i<66:
s.setdefault('k2',[]).append(i)
else:
continue
print(s)
6、输出商品列表,用户输入序号,显示用户选中的商品(升级题)
商品列表:
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}, ]
for i in range(len(goods)):
print(i+1,goods[i]['name'],goods[i]['price'])
while 1:
content = input("输入Q退出,或请输入选择的商品序号:").strip()
if content.upper()=='Q':
break
elif content.isdigit():
if int(content) in range(1,len(goods)+1):
print(int(content),goods[int(content)-1]['name'],goods[int(content)-1]['price'])
else:
print('输入错误,请重新输入')
else:
print('输入错误,请重新输入')
方法二:运用三元运算符
goods = [{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998}, ]
for i in range(len(goods)):
print(i+1,goods[i]['name'],goods[i]['price'])
while 1:
content = input("输入Q退出,或请输入选择的商品序号:").strip()
if content.upper()=='Q':
break
elif content.isdigit():
print(int(content),goods[int(content)-1]['name'],goods[int(content)-1]['price'] if int(content) in range(1,len(goods)+1) else print('输入错误,请重新输入'))
else:
print('输入错误,请重新输入')

补充:字典没有就显示后面的这条数据

巨蟒python全栈开发-第5天 字典&集合的更多相关文章

  1. 巨蟒python全栈开发linux之centos1

    1.linux服务器介绍 2.linux介绍 3.linux命令学习 linux默认有一个超级用户root,就是linux的皇帝 注意:我的用户名是s18,密码是centos 我们输入密码,点击解锁( ...

  2. 巨蟒python全栈开发-第20天 核能来袭-约束 异常处理 MD5 日志处理

    一.今日主要内容 1.类的约束(对下面人的代码进行限制;项目经理的必备技能,要想走的长远) (1)写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError(重点) (2)抽象 ...

  3. 巨蟒python全栈开发linux之centos6

    1.nginx复习 .nginx是什么 nginx是支持反向代理,负载均衡,且可以实现web服务器的软件 在129服务器中查看,我们使用的是淘宝提供的tengine,也是一种nginx服务器 我们下载 ...

  4. 巨蟒python全栈开发linux之centos3

    1.作业讲解 (1)递归创建文件夹/tmp/oldboy/python/{alex,wusir,nvshen,xiaofeng} 下面中的路径没有必要换,在哪里创建都行,根目录下或者tmp目录下或者其 ...

  5. 巨蟒python全栈开发django5:组件&&CBV&FBV&&装饰器&&ORM增删改查

    内容回顾: 补充反向解析 Html:{% url ‘别名’ 参数 %} Views:reverse(‘别名’,args=(参数,)) 模板渲染 变量 {{ 变量名 }} 逻辑相关 {% %} 过滤器: ...

  6. 巨蟒python全栈开发-第11阶段 ansible_project2

    一个NB的网站: https://www.toolfk.com/ CDN:将用户的需求送到最近的节点:内容分发网络 有些是专门做CDN的工具 常用的markdown是需要知道的,短信有字数限制. we ...

  7. 巨蟒python全栈开发-第4天 列表&元组&range

    今日内容大纲 1. 什么是列表 定义: 能装对象的对象 在python中使用[]来描述列表, 内部元素用逗号隔开. 对数据类型没有要求 列表存在索引和切片. 和字符串是一样的. 2. 相关的增删改查操 ...

  8. 巨蟒python全栈开发-第13天 内置函数 匿名函数lambda

    一.今日内容总览 1.内置函数(1):并不是每一个内置函数都是那么常用 上菜:内置函数部分//思维导图:https://www.processon.com/view/link/5b4ee15be4b0 ...

  9. 巨蟒python全栈开发-第14天 内置函数2 递归 二分查找

    一.今日内容总览 1.内置函数补充 repr() 显示出字符串的官方表示形式 chr() arscii码中的字,转换成位置 ord() arscii码中的位置,转换成字2.递归 自己调用自己 两个口: ...

随机推荐

  1. SUSE11SP3--安装svn

    SUSE上安装新版本的subversion是一件很麻烦的事情,涉及到的依赖太多,包括需要更新部分工具的版本. 为了以较小的代价安装subversion,我决定在SUSE11下安装 subversion ...

  2. 如何给app客户端进行埋点?

    1.什么是数据埋点? 当一款app开发完成后,一定需要查看数据,来分析用户访问量,点击量,转化率等等指标.想要查看数据,就得先做好数据埋点 注:html和app数据埋点的方式不同 2.常用app数据分 ...

  3. atitit.atiOrm.js v2 q61 版本新特性.docx

    atitit.atiOrm.js v2 q61 版本新特性.docx 1. V1新特性如下1 1.1. V2规划,直接生成sql在js端1 2. Orm设计框架图1 2.1. atiOrm.js的原理 ...

  4. Atitit .h5文件上传 v3

    Atitit .h5文件上传 v3 1. 上传原理1 2. V3版新特性1 3. Html1 4. Js2 5. uploadV2.js2 6. upServlet & FileUploadS ...

  5. Vue 混合

    混合(mixins)是一种分发vue组件中可复用功能的非常灵活的方式.混合对象可以可以包含任意组件选项.以组件使用混合对象时,所有混合对象的选项将被混合到该组件本身的选项. //定义一个混合对象 va ...

  6. 实现DIV居中的几种方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. linux学习笔记8--命令touch

    linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件. touch命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认 ...

  8. I帧、B帧、P帧、NALU类型

    i帧 i frame,即内部画面 intra picture,通常是GOP的第一个帧(即IDR)I帧是最大去除图像空间冗余信息而压缩得到的帧,自带全部信息,不参考其他帧可独立解码,称为帧内编码帧所有视 ...

  9. python+fastcgi+flup获取请求的数据和环境变量

    关于nginx+python+fastcgi+flup搭建fastcgi环境没问题了,可是如何处理POST/GET的请求数据呢,这个问题着实纠结了没久,通过尝试和阅读flup的源代码,终于明白了.先上 ...

  10. HDFS的HA机制

    传统的HDFS机制如下图所示: 也就是存在一个NameNode,一个SecondaryNameNode,然后若干个DataNode.这样的机制虽然元数据的可靠性得到了保证(靠edits,fsimage ...