3. 字典操作字典一种 key-value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。语法:info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}字典的特性:● dict 是无序的● key 必须是唯一的,so 天生去重通过索引进行查找,列表是通过位置索引,字典中的索引就不是了'stu1101' 就是索引,叫做key,字典是 key-value 键值对的数据类型'stu1101' 是学号,后面 "TengLan Wu" 是名字,中间用 冒号 分隔'stu1101':"TengLan Wu" 就是一条数据,第二条数据,中间用 逗号 隔开3-1 增加和修改info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}print(info)---> {'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}字典是无序的,因为没有下标,字典不需要下标,字典通过 key 进行查找,所以是乱序的列表有下标,列表的下标就是它的位置信息,必须记录位置3-1-1 如何获取呢?info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}print(info["stu1101"])---> TengLan Wu3-1-2 如何修改呢?info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}info["stu1101"] = "武藤兰"print(info)---> {'stu1101': '武藤兰', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}结果就是修改了的3-1-3 如果 key 本身不存在info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}info["stu1104"] = "CangJingkong"       # 如果不存在这个 keyprint(info)---> {'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': 'CangJingkong'}   结果添加了一条如果存在就修改,不存在就创建3-2 删除 3-2-1 del 删除和列表方式相同,del 是 python 内置的通用方法,想删除谁就删掉谁info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}del info["stu1101"]print(info)---> {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}3-2-2 通过 pop 删除info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}info.pop("stu1101")print(info)---> {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}3-2-3 popitem() 删除info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}info.popitem()      # 随机删除print(info)---> {'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola'}# popitem 不建议使用3-3 查找3-3-1 存在的情况info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}info['stu1103']# 存在的情况下,是不会出错的3-3-2 如果 key 不存在怎么办info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}print(info.get('stu1104'))---> Noneprint(info.get('stu1103'))---> XiaoZe Maliya# 有值就返回,没有就返回 None,这种永远不会出错3-3-3 如何判断一个字典里是否存在数据?info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}print('stu1104' in info) ---> Falseprint('stu1103' in info)---> True# Python2 中的写法:info.has_key("1103")3-4 多级字典的嵌套及操作字典可以层层嵌套,最后变成树状结构av_catalog = {    "欧美":{        "www.youporn.com":["很多免费的,世界最大的","质量一般"],        "www.pornhub.com":["很多免费的,也很大","质量比yourporn高点"],        "letmedothistoyou.com":["多是自拍,高质量图片很多","资源不多,更新慢"],        "x-art.com":["质量很高,真的很高","全部收费,吊比请绕过"]    },    "日韩":{        "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]    },    "大陆":{        "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]    }}字典catalog中 有三个key 欧美 日韩 大陆["很多免费的,世界最大的","质量一般"] 前面是介绍,后面是点评3-4-1 如何操作?如何修改 "服务器在国外,慢" ?av_catalog = {    "欧美":{        "www.youporn.com":["很多免费的,世界最大的","质量一般"],        "www.pornhub.com":["很多免费的,也很大","质量比yourporn高点"],        "letmedothistoyou.com":["多是自拍,高质量图片很多","资源不多,更新慢"],        "x-art.com":["质量很高,真的很高","全部收费,吊比请绕过"]    },    "日韩":{        "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]    },    "大陆":{        "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]    }}av_catalog["大陆"]["1024"][1] = "可以在国内做镜像"print(av_catalog)---> {'欧美': {'www.youporn.com': ['很多免费的,世界最大的', '质量一般'], 'www.pornhub.com': ['很多免费的,也很大', '质量比yourporn高点'], 'letmedothistoyou.com': ['多是自拍,高质量图片很多', '资源不多,更新慢'], 'x-art.com': ['质量很高,真的很高', '全部收费,吊比请绕过']}, '日韩': {'tokyo-hot': ['质量怎样不清楚,个人已经不喜欢日韩范了', '听说是收费的']}, '大陆': {'1024': ['全部免费,真好,好人一生平安', '可以在国内做镜像']}}# 注意,Key 尽量不要写中文,为了避免编码不一致的问题3-5 其他字典相关用法3-5-1 获取 valuesinfo.values()   # 获取不包含 key 的 所有值info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}print(info.values())---> dict_values(['TengLan Wu', 'LongZe Luola', 'XiaoZe Maliya'])3-5-2 获取 keysinfo.keys()info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}print(info.keys())---> dict_keys(['stu1101', 'stu1102', 'stu1103'])3-5-3-1 setdefaultinfo.setdefault()av_catalog = {    "欧美":{        "www.youporn.com":["很多免费的,世界最大的","质量一般"],        "www.pornhub.com":["很多免费的,也很大","质量比yourporn高点"],        "letmedothistoyou.com":["多是自拍,高质量图片很多","资源不多,更新慢"],        "x-art.com":["质量很高,真的很高","全部收费,吊比请绕过"]    },    "日韩":{        "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]    },    "大陆":{        "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]    }}现在想创建一个新的地区av_catalog.setdefault("台湾",{"www.baidu.com":[1,2]})前面 台湾 是 keyprint(av_catalog)---> {'欧美': {'www.youporn.com': ['很多免费的,世界最大的', '质量一般'], 'www.pornhub.com': ['很多免费的,也很大', '质量比yourporn高点'], 'letmedothistoyou.com': ['多是自拍,高质量图片很多', '资源不多,更新慢'], 'x-art.com': ['质量很高,真的很高', '全部收费,吊比请绕过']}, '日韩': {'tokyo-hot': ['质量怎样不清楚,个人已经不喜欢日韩范了', '听说是收费的']}, '大陆': {'1024': ['全部免费,真好,好人一生平安', '服务器在国外, 慢']}, '台湾': {'www.baidu.com': [1, 2]}}3-5-3-2 如果已经存在 setdefaultinfo.setdefault()av_catalog = {    "欧美":{        "www.youporn.com":["很多免费的,世界最大的","质量一般"],        "www.pornhub.com":["很多免费的,也很大","质量比yourporn高点"],        "letmedothistoyou.com":["多是自拍,高质量图片很多","资源不多,更新慢"],        "x-art.com":["质量很高,真的很高","全部收费,吊比请绕过"]    },    "日韩":{        "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]    },    "大陆":{        "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]    }}现在想创建一个新的地区av_catalog.setdefault("大陆",{"www.baidu.com":[1,2]})print(av_catalog)---> {'欧美': {'www.youporn.com': ['很多免费的,世界最大的', '质量一般'], 'www.pornhub.com': ['很多免费的,也很大', '质量比yourporn高点'], 'letmedothistoyou.com': ['多是自拍,高质量图片很多', '资源不多,更新慢'], 'x-art.com': ['质量很高,真的很高', '全部收费,吊比请绕过']}, '日韩': {'tokyo-hot': ['质量怎样不清楚,个人已经不喜欢日韩范了', '听说是收费的']}, '大陆': {'1024': ['全部免费,真好,好人一生平安', '服务器在国外, 慢']}}# 这时 结果并没有改变~setdefault,如果key值能取到,就返回;如果取不到,就创建一个新的3-5-4 info.update()info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}b = {    'stu1101':"Alex",    1:3,    2:5}字典 info 和 字典 b 中 有交叉项info.update(b)print(info)---> {'stu1101': 'Alex', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 1: 3, 2: 5}合并字典,有交叉覆盖,没交叉添加3-5-5 info.items()info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}b = {    'stu1101':"Alex",    1:3,    2:5}info.update(b)# print(info)print(info.items())---> dict_items([('stu1101', 'Alex'), ('stu1102', 'LongZe Luola'), ('stu1103', 'XiaoZe Maliya'), (1, 3), (2, 5)])结果变成了一个列表,将一个字典转换成列表3-5-6-1 fromkeys()info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}b = {    'stu1101':"Alex",    1:3,    2:5}info.update(b)print(info)c = info.fromkeys([6,7,8])print(c)---> {6: None, 7: None, 8: None}# fromkeys 创建一个新的字典,里面的每一个 key 是列表中的值,后面是空的,空的地方可以想写什么写什么3-5-6-2 fromkeys()info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}b = {    'stu1101':"Alex",    1:3,    2:5}info.update(b)print(info)c = info.fromkeys([6,7,8],"test")print(c)---> {6: 'test', 7: 'test', 8: 'test'}# 但实际上,c 和 info 没关系,确实是这样,fromkeys 确实和 info 没有关系3-5-6-3 fromkeys()c = dict.fromkeys([6,7,8],"test")print(c)---> {6: 'test', 7: 'test', 8: 'test'}# fromkeys 初始化一个新的字典3-5-6-4 fromkeys() 的坑c = dict.fromkeys([6,7,8],[1,{"name":"alex"},444])print(c)---> {6: [1, {'name': 'alex'}, 444], 7: [1, {'name': 'alex'}, 444], 8: [1, {'name': 'alex'}, 444]}c[7][1]['name'] = "Jack Chen"print(c)---> {6: [1, {'name': 'Jack Chen'}, 444], 7: [1, {'name': 'Jack Chen'}, 444], 8: [1, {'name': 'Jack Chen'}, 444]}发现全部都改掉了,其实这和 copy 是一样的,3 个 key 共享一个 内存地址,所以 全部都改了3-5-7 字典的循环info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}for i in info:    print(i)---> stu1101     stu1102     stu1103# 打印的只是 key3-5-7-1 如果想打印 valueinfo = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}for i in info:    print(i,info[i])---> stu1101 TengLan Wu     stu1102 LongZe Luola     stu1103 XiaoZe Maliya3-5-7-2 还会看到的一种循环是info = {    'stu1101':"TengLan Wu",    'stu1102':"LongZe Luola",    'stu1103':"XiaoZe Maliya",}for k,v in info.items():    print(k,v)---> stu1101 TengLan Wu     stu1102 LongZe Luola     stu1103 XiaoZe Maliya和 3-5-7-1 的区别是,上面的要高效很多,因为是通过索引,直接将 value 取出来了而 通过 item 先将字典 变成了 列表,第一个是 key,第二个是 value; 有一个将 字典转换成列表的过程如果数据量很大,差别就很大了,所以最好的办法是用上面的

更多相关文章

  1. SLA 4 个 9 ,贝壳高可用架构的质量保障体系
  2. 如何打造高质量的SSP广告引擎(内部干货分享)
  3. sonar+Jenkins 构建代码质量自动化分析平台
  4. 实例化需求,软件外包质量管理的神器
  5. 开发高质量软件的5大原则
  6. 使用jenkins构建自动化发布系统之Sonar 代码质量管理
  7. 浅谈海量平台的质量管理
  8. 代码质量管理的一些思路
  9. QA与测试到底有什么区别?

随机推荐

  1. 深入探讨 Undefined [每日前端夜话(0x0E)
  2. 《大前端吊打面试官系列》之备战面试篇!
  3. 现代浏览器探秘(part2):导航[每日前端夜
  4. 用Python和Tableau对母婴商品销量进行数
  5. 浅议 Promise/Futures 模型 [每日前端夜
  6. 1-20
  7. 现代浏览器探秘(part3):渲染 [每日前端夜
  8. 自学系列 | 就谈知识体系!
  9. Python异步爬虫进阶必备,效率杠杠的!
  10. Ansible 之 外部变量文件调用