今日大纲:

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没有要求.可以保存任意类型的数据.

  1. dic={}
    print(type(dic)) #<class 'dict'>
    (1)#查找,通过列表引入字典
    lst=['周杰伦','林俊杰','蔡依林'] #lst[0]
    总结:字典是自定义下标的列表
  2.  
  3. 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. (1)
    增加 dic[新键]=新值
    dic[老键]=新值
    dic={'意大利':'李云龙','美国':'美国往事'}
    dic['日本']='东京审判' #新key表示添加
    dic['韩国']='釜山行'
    dic['美国']="华尔街之狼" #更新
    print(dic)
  2.  
  3. 增加 setdefault(难点)
    总结:
      有添加的功能,如果key是存在的,不添加
      流程:判断你给的key是否在字典中存在了,如果已经存在了,则不再新增,不存在,则添加
  1. dic={'意大利':'李云龙','美国':'美国往事'}
  2. dic.setdefault('印度') #只有键,值显示 None
  3. print(dic) #结果:{'意大利': '李云龙', '美国': '美国往事', '印度': None}
  4.  
  5. dic.setdefault('印度','三傻大闹宝莱坞') #即使是空值也不重新赋值
  6. print(dic) #结果:{'意大利': '李云龙', '美国': '美国往事', '印度': None}
  7.  
  8. dic.setdefault('美国','三傻大闹宝莱坞')
  9. print(dic) #结果:{'意大利': '李云龙', '美国': '美国往事', '印度': None}
  1. 总结:即使一用setdefault开始创建没有添加值,利用setdefault再次添加也不会更新新的值.
    (2)删除 pop/popitem/del/clear
  1. dic={'张艺谋':'红高粱','李安':'断背山','陈凯歌':'霸王别姬','郭德纲':'祖宗十九代'}
  2. 方法一
  3. dic.pop('郭德纲') #重点 需要记住的
  4. print(dic) #结果: {'张艺谋': '红高粱', '李安': '断背山', '陈凯歌': '霸王别姬'}
  5. 方法二
  6. dic.popitem() #现在python3.6是删除最后一个,python3.5以前随机删除 ,在Python早期,字典的无序的
  7. print(dic) #结果: {'张艺谋': '红高粱', '李安': '断背山'}
  8. 方法三
  9. del dic['李安']
  10. print(dic) #结果: {'张艺谋': '红高粱'}
  11.  
  12. dic.clear() #清空
  13. print(dic) #结果: {}
  1. (3)#修改 dic[新键]=新值 update
  1. dic={'河南':'胡辣汤','开封':'灌汤包','武汉':'热干面'}
  2. dic['河南']='烩面' #总结:老key=新值
  3. print(dic) #{'河南': '烩面', '开封': '灌汤包', '武汉': '热干面'}
  4.  
  5. update
  6. dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
  7. dic2={'赵四':'宝宝','刘能':'萌萌','皮校长':'皮长山'}
  8. dic1.update(dic2)
  9. print(dic1) #dic2把dic1更新 结果:{'赵四': '宝宝', '刘能': '萌萌', '王木生': '范伟', '皮校长': '皮长山'}
  10. print(dic2) #dic2不变 结果:{'赵四': '宝宝', '刘能': '萌萌', '皮校长': '皮长山'}
  1. 小结:update有相同的键,就把原来的值更新,但是不常用
  2.  
  3. (4)查找
  1. dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
  2. a. 直接使用key就可以拿到value
  3. dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
  4. print(dic1['赵四']) #结果:刘小光
  5. print(dic1['赵四四']) #KeyError: '赵四四' key不存在
  6.  
  7. b. get(key)
  8. dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
  9. print(dic1.get('刘能')) #结果:王晓利
  10. print(dic1.get('刘能能')) #结果:None 当key不存在返回None
  11. print(dic1.get('刘能能','没有这个人')) #结果:当key不存在,返回第二个参数,默认第二个参数是None
  12.                         #结果:没有这个人
  13. c.  setdefault()
  1. setdefault() 第一个功能是添加(当key不存在),第二个功能是查询(根据你给的key查询)
    整个执行流程:判断给的key是否存在,
    如果key存在,就不执行新增流程,直接查询出这个key对应的value
    如果key不存在,先执行新增操作,再使用key把对应的value查询出来
  1. 例一
  2.   dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
  3.   ret=dic1.setdefault('皮长山','皮校长')
  4.   print(ret) #结果:皮校长 #先找再查
  5.  
  6. 例二
  7.   dic1={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
  8.   ret=dic1.setdefault('王木生','宝宝')
  9.   print(ret) #结果:范伟 #先找再查

三.字典的遍历

  1. (1)for循环遍历字典
    A.
    dic={'赵四':'刘小光','刘能':'王晓利','王木生':'范伟'}
    直接用for循环
    for key in dic: #直接循环字典拿到的是key,有key直接拿value
    print(key)
    print(dic[key])
  2.  
  3. 结果:
    赵四
    刘小光
    刘能
    王晓利
    王木生
    范伟
    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)
  4.  
  5. 结果:
       赵四 刘小光
       刘能 王晓利
       王木生 范伟
    (3)
    a,b=1,2 #解构,解包
    print(a)
    print(b)
  6.  
  7. c=1,2,3
    print(c)      #1,2,3
    print(type(c)) #<class 'tuple'>
  1. d=(1,2,3) #没有解包,直接创建一个元组
    print(d)
  2.  
  3. 支持解包的类型: list,tuple
    (4)
    遍历字典的最简单的方法(最高效的方法)
    #for k,v in dic.items():
  4.  
  5. dic={'周五':'等着放假','周六':'放假','周日':'等着上课'}
    a.直接用for循环遍历字典的key
    for k in dic: #k直接拿到的是key
    print(k,dic[k])
  6.  
  7. b.使用dic.items() 解构可以直接拿到k,v,也就是键和值
    for k,v in dic.items():
    print(k,v)

四.字典的嵌套

题目

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

五.set集合

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

今日作业

  1. # 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是不可变数据类型,第一层元素的第一个元素是不可以更改的
    #字符串不可变
    #元组第一层不可变
    '''
  2.  
  3. # 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)
    '''
  4.  
  5. # d.请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素"Seven"
  6.  
  7. '''
    (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'
    '''
  8.  
  9. 2 字典dic, dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
  1. # a.请循环输出所有的key
  2. '''
  3. dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
  4. #方法一
  5. # for i in dic:
  6. # print(i)
  7. #方法二:
  8. # for i in dic.keys():
  9. # print(i)
  10. '''
  11. # b.请循环输出所有的value
  12. '''
  13. dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
  14. # 方法一
  15. for i in dic:
  16. print(dic[i])
  17. # 方法二:
  18. for i in dic.keys():
  19. print(dic[i])
  20. '''
  21. # c.请循环输出所有的key和value
  22. '''
  23. #方法一:
  24. dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
  25. for i in dic:
  26. print(i,dic[i])
  27. #方法二:
  28. for k,v in dic.items():
  29. print(k,v)
  30. '''
  31. # d.请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
  32. '''
  33. dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
  34. # 方法一:
  35. # dic['k4']='v4'
  36. # print(dic)
  37. #方法二
  38. # dic.setdefault('k4','v4')
  39. # print(dic)
  40. '''
  41.  
  42. # e.请在修改字典中"k1"对应的值为"alex",输出修改后的字典
  43. '''
  44. #方法一:
  45. dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
  46. dic['k1']='alex'
  47. print(dic)
  48. # 方法二
  49. dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
  50. dic1={'k1':'alex'}
  51. dic.update(dic1)
  52. print(dic)
  53. '''
  54.  
  55. # f.请在k3对应的值中追加一个元素44,输出修改后的字典
  56. '''
  57. dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
  58. dic['k3'].append(44)
  59. print(dic)
  60. '''
  61. # g.请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典
  62. '''
  63. dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
  64. # dic['k3'].insert(1,'18')
  65. dic['k3'].insert(0,'18')
  66. print(dic)
  1. 3
  1. av_catalog = {
  2. "欧美": {
  3. "www.youporn.com": ["很多免费的,世界最大的", "质量一般"],
  4. "www.pornhub.com": ["很多免费的,也很大", "质量比yourporn高点"],
  5. "letmedothistoyou.com": ["多是自拍,高质量图片很多", "资源不多,更新慢"],
  6. "x-art.com": ["质量很高,真的很高", "全部收费,屌丝请绕过"]
  7. },
  8. "日韩": {
  9. "tokyo-hot": ["质量怎样不清楚,个人已经不喜欢日韩范了", "verygood"]
  10. },
  11. "大陆": {
  12. "": ["全部免费,真好,好人一生平安", "服务器在国外,慢"]
  13. }
  14. }
  1. # a, 给此["很多免费的,世界最大的", "质量一般"]列表第二个位置插入一个元素:'量很大'。
  2. #注意这个插入的方法的应用
  3. av_catalog['欧美']["www.youporn.com"].insert(1,'量很大')
  4. print(av_catalog)
  5. # b, 将此["质量很高,真的很高", "全部收费,屌丝请绕过"]列表的"全部收费,屌丝请绕过"删除。
  6. #方法:del remove pop
  7.  
  8. #方法一
  9. # av_catalog['欧美']["x-art.com"].pop()
  10. # print(av_catalog)
  11. #方法二:
  12. # del av_catalog['欧美']["x-art.com"][1]
  13. # print(av_catalog)
  14. # 方法三:
  15. # av_catalog['欧美']["x-art.com"].pop(1)
  16. # print(av_catalog)
  17. #方法四:
  18. # av_catalog['欧美']["x-art.com"].remove("全部收费,屌丝请绕过")
  19. # print(av_catalog)
  20. '''
  21. # c, 在此["质量很高,真的很高", "全部收费,屌丝请绕过"]列表中添加"金老板最喜欢这个"。
  22. '''
  23. #方法一
  24. # av_catalog['欧美']['x-art.com'].append('金老板最喜欢这个')
  25. # print(av_catalog)
  26. #方法二
  27. # av_catalog['欧美']['x-art.com'].insert(-1,'金老板最喜欢这个')
  28. # print(av_catalog)
  29. '''
  30. # d, 将此["质量怎样不清楚,个人已经不喜欢日韩范了", "verygood"]列表的"verygood"全部变成大写。
  31. '''
  32. #方法一
  33. # av_catalog['日韩']['tokyo-hot'][-1]=av_catalog['日韩']['tokyo-hot'][-1].upper()
  34. # print(av_catalog)
  35. #方法二
  36. # av_catalog['日韩']['tokyo-hot'][-1]=av_catalog['日韩']['tokyo-hot'][-1].swapcase()
  37. # print(av_catalog)
  38. # 方法三
  39. # av_catalog['日韩']['tokyo-hot'][-1]='VERYGOOD'
  40. # print(av_catalog)
  41. #方法四
  42. # av_catalog['日韩']['tokyo-hot'][1]='VERYGOOD'
  43. # print(av_catalog)
  44. '''
  45. # e, 给'大陆'对应的字典添加一个键值对 '1048': ['一天就封了']
  46. '''
  47. #方法一
  48. # av_catalog['大陆']['1048']='一天就封了'
  49. # print(av_catalog)
  50. # 方法二
  51. # av_catalog['大陆'].setdefault('1048','一天就封了')
  52. # print(av_catalog)
  53. '''
  54. # f, 删除此 "letmedothistoyou.com": ["多是自拍,高质量图片很多", "资源不多,更新慢"]键值对。
  55. '''
  56. #pop和del 可以指定删除字典
  57. # 方法一
  58. # av_catalog['欧美'].pop('letmedothistoyou.com')
  59. # print(av_catalog)
  60. #方法二
  61. # del av_catalog['欧美']['letmedothistoyou.com']
  62. # print(av_catalog)
  63. '''
  64. # g, 给此["全部免费,真好,好人一生平安", "服务器在国外,慢"]列表的第一个元素,加上一句话:'可以爬下来'
  65. '''
  66. #方法一;在最前面添加一个元素"可以爬下来"
  67. # av_catalog['大陆']['1024'].insert(0,'可以爬下来')
  68. # print(av_catalog)
  69. #方法二1:#在第一个元素的后面添加
  70. # av_catalog['大陆']['1024'][0]=av_catalog['大陆']['1024'][0]+'可以爬下来'
  71. # print(av_catalog)
  72. #方法二2:
  73. av_catalog['大陆']['1024'][0]='全部免费,真好,好人一生平安可以爬下来'
  74. print(av_catalog)
  1. 4、有字符串
    "k:1|k1:2|k2:3|k3:4"
    处理成字典
    {'k': 1, 'k1': 2....}(升级题)
  1. #方法一:
  2. # dic={}
  3. # s="k:1|k1:2|k2:3|k3:4"
  4. # s=s.split("|")
  5. # print(s)
  6. # for i in s:
  7. # a,b=i.split(':')
  8. # dic[a]=int(b)
  9. # print(dic)
  10.  
  11. #方法二
  12. # dic={}
  13. # s="k:1|k1:2|k2:3|k3:4"
  14. # s=s.split("|")
  15. # print(s)
  16. # for i in s:
  17. # a=i.split(':')
  18. # dic[a[0]]=int(a[1])
  19. # print(dic)
  1. 5、元素分类
    有如下值li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90],将所有大于66的值保存至字典的第一个key中,将小于66
    的值保存至第二个key的值中。
    即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}
  2.  
  3. 方法一
  1. s={'k1':[],'k2':[]}
  2. li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
  3. for i in li:
  4. if i>66:
  5. s['k1'].append(i)
  6. elif i<66:
  7. s['k2'].append(i)
  8. else:
  9. continue
  10. print(s)
  1. 方法二
  1. s={}
  2. li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
  3. for i in li:
  4. if i>66:
  5. s.setdefault('k1',[]).append(i)
  6. elif i<66:
  7. s.setdefault('k2',[]).append(i)
  8. else:
  9. continue
  10. print(s)
  1. 6、输出商品列表,用户输入序号,显示用户选中的商品(升级题)
    商品列表:
    goods = [{"name": "电脑", "price": 1999},
    {"name": "鼠标", "price": 10},
    {"name": "游艇", "price": 20},
    {"name": "美女", "price": 998}, ]
    要求:
    1:页面显示
    序号 + 商品名称 + 商品价格,如:
    1 电脑 1999
    2 鼠标 10

    2:用户输入选择的商品序号,然后打印商品名称及商品价格
    3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。
    4:用户输入Q或者q,退出程序。
  1. goods = [{"name": "电脑", "price": 1999},
  2. {"name": "鼠标", "price": 10},
  3. {"name": "游艇", "price": 20},
  4. {"name": "美女", "price": 998}, ]
  5. for i in range(len(goods)):
  6. print(i+1,goods[i]['name'],goods[i]['price'])
  7. while 1:
  8. content = input("输入Q退出,或请输入选择的商品序号:").strip()
  9. if content.upper()=='Q':
  10. break
  11. elif content.isdigit():
  12. if int(content) in range(1,len(goods)+1):
  13. print(int(content),goods[int(content)-1]['name'],goods[int(content)-1]['price'])
  14. else:
  15. print('输入错误,请重新输入')
  16. else:
  17. print('输入错误,请重新输入')
  1. 方法二:运用三元运算符
  1. goods = [{"name": "电脑", "price": 1999},
  2. {"name": "鼠标", "price": 10},
  3. {"name": "游艇", "price": 20},
  4. {"name": "美女", "price": 998}, ]
  5. for i in range(len(goods)):
  6. print(i+1,goods[i]['name'],goods[i]['price'])
  7. while 1:
  8. content = input("输入Q退出,或请输入选择的商品序号:").strip()
  9. if content.upper()=='Q':
  10. break
  11. elif content.isdigit():
  12. print(int(content),goods[int(content)-1]['name'],goods[int(content)-1]['price'] if int(content) in range(1,len(goods)+1) else print('输入错误,请重新输入'))
  13. else:
  14. 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. C语言 (内存) 四道经典题目

    void GetMemory(char *p) { p = (); "没有释放内存" } void Test(void) { char *str = NULL; GetMemory ...

  2. Mysql暴错注入代码-webshell

      MySql Error Based Injection Reference[Mysql暴错注入参考]Author:Pnig0s1992Mysql5.0.91下测试通过,对于5+的绝大部分版本可以测 ...

  3. 关于dbutils中QueryRunner看批量删除语句batch

    //批量删除 public void delBooks(String[] ids) throws SQLException { QueryRunner qr = new QueryRunner(C3P ...

  4. webservice统一认证

    service package cn.edu.hbcf.privilege.ws; import javax.jws.WebParam; import javax.jws.WebService; @W ...

  5. ext,exrReturn新增,修改删除等用

    package cn.edu.hbcf.common.vo; /** * Ext Ajax 返回对象 * * @author * @date 2012-02-21 19:30:00 * */ publ ...

  6. java 读写文件常用方法

    package study.bigdata; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; ...

  7. C. Magic Five

    C. Magic Five Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 524288/262144K (Java/Other) Tot ...

  8. [Python基础]Python文件处理小结

    1. 文件的打开与关闭 <1>打开文件 在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件 open(文件名,访问模式) 示例如下: f = open('te ...

  9. 手把手教你Chrome扩展开发:本地存储篇

    手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩展二:为html添加行为 手把手教你开发Chrome扩展三:关于本地存储数据 HTML5 ...

  10. jQuery设置和获取HTML、文本和值

    jQuery设置和获取HTML.文本和值 按 Ctrl+C 复制代码 <script type="text/javascript"> //<![CDATA[ $( ...