20201225-1 字典的使用
作者:互联网
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 Wu 3-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" # 如果不存在这个 key print(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')) ---> None print(info.get('stu1103')) ---> XiaoZe Maliya # 有值就返回,没有就返回 None,这种永远不会出错 3-3-3 如何判断一个字典里是否存在数据? info = { 'stu1101':"TengLan Wu", 'stu1102':"LongZe Luola", 'stu1103':"XiaoZe Maliya", } print('stu1104' in info) ---> False print('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 获取 values info.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 获取 keys info.keys() info = { 'stu1101':"TengLan Wu", 'stu1102':"LongZe Luola", 'stu1103':"XiaoZe Maliya", } print(info.keys()) ---> dict_keys(['stu1101', 'stu1102', 'stu1103']) 3-5-3-1 setdefault info.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]}) 前面 台湾 是 key print(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 如果已经存在 setdefault info.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 # 打印的只是 key 3-5-7-1 如果想打印 value info = { '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 Maliya 3-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; 有一个将 字典转换成列表的过程 如果数据量很大,差别就很大了,所以最好的办法是用上面的
标签:info,stu1103,stu1101,stu1102,Luola,使用,XiaoZe,20201225,字典 来源: https://www.cnblogs.com/azxsdcv/p/14187824.html