创建字典
创建字典的几种方式
使用大括号创建
| dict001 = {'a': 1, 'b': 2, 'c': 3} |
使用 dict() 函数创建
| |
| dict001 = dict(a=1, b=2, c=3) |
| |
| tuple_list =[("name", "jack"), ("age", 30)] |
| dict002 = dict(tuple_list) |
| |
| dict003 = dict(zip("abc",[1,2,3])) |
| |
| dict004 = {char : char* 2 for char in "ABCD"} |
使用字典的 fromkeys() 函数初始化一个字典
| |
| seq = ('x', 'y', 'z') |
| |
| dict003 = dict.fromkeys(seq, 10) |
创建一个有序的字典
在 Python 3.7 版本之前,字典是无序的,及输入dict001={'a':1,'b':2,'c':3},打印的可能是dict001={'b':2,'c':3,'a':1},但在 Python 3.7 及以上的版本中,保留了字典的插入顺序,及如何输入的就会如何输出,值得注意的是在进行字典比较时,比较的是里面的内容,内容一样,则返回True
| dict001={'a':1,'b':2,'c':3} |
| dict002={'b':2,'c':3,'a':1} |
| print(dict001==dict002) |
而真正创建有序的字典则需要用到collections模块中的OrderedDict,内容一样,但顺序不同,则会返回False。
| from collections import OrderedDict |
| |
| |
| my_ordered_dict = OrderedDict() |
| |
| d001 = OrderedDict() |
| d001['a'] = 1 |
| d001['b'] = 2 |
| d001['c'] = 3 |
| print(d001) |
| |
| d002 = OrderedDict() |
| d002['a'] = 1 |
| d002['c'] = 3 |
| d002['b'] = 2 |
| print(d002) |
| print(d001==d002) |
| |
| d003 = OrderedDict() |
| d003['a'] = 1 |
| d003['b'] = 2 |
| d003['c'] = 3 |
| print(d001==d003) |
字典的浅拷贝和深拷贝
浅拷贝:
| hold_list = [1,2,3] |
| old_dict = {"num":hold_list} |
| new_dict = old_dict.copy() |
| print(id(old_dict["num"])) |
| print(id(new_dict["num"])) |
| |
深拷贝:
| from copy import deepcopy |
| |
| hold_list = [1,2] |
| old_dict = {"num":hold_list} |
| new_dict = deepcopy(old_dict) |
| print(id(old_dict["num"])) |
| print(id(new_dict["num"])) |
| |
字典的添加操作
使用中括号的方式
| dict001 = {'杨过': '小龙女'} |
| |
| dict001['郭靖'] = '黄蓉' |
| print(dict001) |
使用update()方法
| dict001 = {'杨过': '小龙女', 'country': 'china'} |
| |
| |
| dict001.update({'郭靖': '黄蓉'}) |
| print(dict001) |
| dict001.update({'country': '中国'}) |
| print(dict001) |
| |
| |
| dict001.update(temp="哈哈", help="呵呵") |
| print(dict001) |
| |
| |
| my_temp_dict = {'杨过': '陆无双', 'age':18} |
| dict001.update(**my_temp_dict) |
| print(dict001) |
字典的删除操作
使用 del 进行删除
| dict001 = {"郭靖": "黄蓉", "张无忌": "赵敏", "杨过": "小龙女", "周伯通": "瑛姑"} |
| |
| del dict001['郭靖'] |
使用 pop() 方法进行删除
| dict001 = {"郭靖": "黄蓉", "张无忌": "赵敏", "杨过": "小龙女", "周伯通": "瑛姑"} |
| |
| variable001 = dict001.pop("郭靖") |
| print(variable001) |
| variable002 = dict001.pop("张三", "哈哈") |
| print(variable002) |
使用 popitem() 方法进行删除
| dict001 = {"郭靖": "黄蓉", "张无忌": "赵敏", "杨过": "小龙女", "周伯通": "瑛姑"} |
| |
| variable = dict001.popitem() |
清空和删除字典
| dict001 = {"郭靖": "黄蓉", "张无忌": "赵敏", "杨过": "小龙女", "周伯通": "瑛姑"} |
| dict001.clear() |
| del dict001 |
字典的获取操作
通过KEY获取对应的值
| dict001 = {"郭靖": "黄蓉", "张无忌": "赵敏", "杨过": "小龙女", "周伯通": "瑛姑"} |
| |
| variable = dict001["郭靖"] |
通过get()方式进行获取
| dict001 = {"郭靖": "黄蓉", "张无忌": "赵敏", "杨过": "小龙女", "周伯通": "瑛姑"} |
| |
| variable = dict001.get("郭靖", "哈哈") |
setdefault() 方法既可以获取又可以添加
| dict001 = {"郭靖": "黄蓉", "张无忌": "赵敏", "杨过": "小龙女", "周伯通": "瑛姑"} |
| |
| variable = dict001.setdefault("apple", '苹果') |
获取所有的Key
| dict001 = {"郭靖": "黄蓉", "张无忌": "赵敏", "杨过": "小龙女", "周伯通": "瑛姑"} |
| |
| variable = dict001.keys() |
| |
| keys = list(variable) |
获取所有的Value
| dict001 = {"郭靖": "黄蓉", "张无忌": "赵敏", "杨过": "小龙女", "周伯通": "瑛姑"} |
| |
| variable = dict001.values() |
| |
| values = list(variable) |
获取所有的键值对列表
| dict001 = {"郭靖": "黄蓉", "张无忌": "赵敏", "杨过": "小龙女", "周伯通": "瑛姑"} |
| |
| variable = dict001.items() |
| |
| keyValue = list(variable) |
批量获取指定键对应的值
需求:给出一个key列表,获取对应的值
使用高阶函数的方式(推荐)
| dict001 = {"郭靖": "黄蓉", "张无忌": "赵敏", "杨过": "小龙女", "周伯通": "瑛姑"} |
| key_list = ["杨过", "郭靖"] |
| values = list(map(dict001.get, key_list)) |
使用列表推导式的方式
| dict001 = {"郭靖": "黄蓉", "张无忌": "赵敏", "杨过": "小龙女", "周伯通": "瑛姑"} |
| key_list = ["杨过", "郭靖"] |
| values = [dict001.get(key) for key in key_list] |
字典的合并和遍历
合并字典
在 Python 2 中,使用 update()合并两个字典,Python 3 变得更加简单。下面脚本中,两个字典被合并。在相交(key相同)的情况下,使用第二个字典中的值。
pyton3中合并字典的方式(推荐)
| dict001 = {'apple':9,'banana':6} |
| dict002 = {'banana':4,'orange':8} |
| dict003 = {**dict001,**dict002} |
| print(dict003) |
借助字典的 dict(**d1, **d2) 方法合并(推荐)
| dict001 = {'a': 1, 'b': 2, 'c': 3} |
| dict002 = {'aa': 11, 'bb': 22, 'cc': 33} |
| print(dict(**dict001, **dict002)) |
借助字典的update()方法合并
| dict001 = {'a': 1, 'b': 2, 'c': 3} |
| dict002 = {'aa': 11, 'bb': 22, 'cc': 33, 'a': 100} |
| dict003 = {} |
| dict003.update(dict001) |
| dict003.update(dict002) |
| print(dict003) |
借助字典的常规处理方法合并(不推荐)
| dict001 = {'a': 1, 'b': 2, 'c': 3} |
| dict002 = {'aa': 11, 'bb': 22, 'cc': 33} |
| dict002 = {} |
| for k, v in dict001.items(): |
| dict003[k] = v |
| for k, v in dict002.items(): |
| dict003[k] = v |
| print(dict003) |
遍历字典
遍历所有的键
| dict001 = {"郭靖": "黄蓉", "张无忌": "赵敏", "杨过": "小龙女", "周伯通": "瑛姑"} |
| |
| for key in dict001: |
| print(key) |
遍历所有的值
| dict001 = {"郭靖": "黄蓉", "张无忌": "赵敏", "杨过": "小龙女", "周伯通": "瑛姑"} |
| for value in dict001.values(): |
| print(value) |
遍历所有的键值对儿
| dict001 = {"郭靖": "黄蓉", "张无忌": "赵敏", "杨过": "小龙女", "周伯通": "瑛姑"} |
| |
| for key, value in dict001.items(): |
| print(key, value) |
字典排序
在Python中,字典本身是无序的,直到Python3.7版本,字典在迭代时会保持插入顺序。如果你需要根据键(key)或值(value)对字典中的项进行排序,可以使用内置的sorted()函数,它返回一个排序后的列表。
按照字典中的键给字典排序
| dict001 = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2} |
| |
| variable = dict(sorted(dict001.items(), key=lambda x: x[0], reverse=True)) |
按照字典中的值给字典排序
| dict001 = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2} |
| |
| variable = dict(sorted(dict001.items(), key=lambda x: x[1], reverse=True)) |
使用 OrderedDict() 进行排序
| from collections import OrderedDict |
| |
| sorted_dict = OrderedDict(sorted(my_dict.items(), key=lambda item: item[1])) |
字典的常见需求
字典格式的字符串转为字典
| import ast |
| |
| |
| user = '{"name" : "john", "gender" : "male", "age": 28}' |
| |
| user_dict1 = ast.literal_eval(user) |
将字典转成json字符串
| import json |
| |
| dict001 = {"name" : "john", "gender" : "male", "age": 28} |
| |
| variable = json.dumps(dict001, indent=4, sort_keys=True) |
dump()函数用于将一个python对象(需要是json可序列化的)保存到相应的json文件中,dump()没有返回值。
| import json |
| |
| dict001 = {"name" : "john", "gender" : "male", "age": 28} |
| with open("test.json", "w") as f: |
| json.dump(dict001, f) |
字典求交集
需求:把两个字典中相同的键值对儿拿出来组成一个新字典
| dict001 = {"郭靖": "黄蓉", "杨过": "小龙女", "tom": "jack", "光头强": "熊大"} |
| dict002 = {"郭靖": "黄蓉", "杨过": "小龙女", "Bob": "ros", "光头强": "熊二"} |
| variable = {k: dict001[k] for k in dict001 if k in dict002 and dict001[k] == dict002[k]} |
键同值不同
需求:找出字典1中和字典2中键相同但值不同,或者字典1中存在但字典2中不存在的键值对
| dict001 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'f': 8} |
| dict002 = {'a': 1, 'b': 2, 'c': 4, 'd': 5, 'e': 6} |
| |
| def compare_dict(dict001, dict002): |
| """ |
| 找出字典1中和字典2中键相同但值不同,或者字典1中存在但字典2中不存在的键值对 |
| """ |
| res = {} |
| for alike_key in dict001: |
| z = dict001.get(alike_key) == dict002.get(alike_key) |
| if not z: |
| print('相同的键:', alike_key) |
| print('字典1的值:', dict001.get(alike_key), '字典2的值:', dict002.get(alike_key)) |
| k1 = "dict001_{}".format(str(alike_key)) |
| k2 = "dict002_{}".format(str(alike_key)) |
| res[k1] = dict001.get(alike_key) |
| res[k2] = dict002.get(alike_key) |
| |
| return res |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!