Python 字典使用
一、字典推导式
(1)语法一:
key:字典中的key
value:字典中的value
dict.items():序列
condition:条件表达式
key_exp:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp处理
value_exp:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp处理
{key_exp:value_exp for key,value in dict.items() if condition}
实例:
dict1 = {"a":10,"B":20,"C":True,"D":"hello world","e":"False"}
获取字典中key值是小写字母的键值对
dict2 = {key:value for key,value in dict1.items() if key.islower()}
dict2:{'a': 10, 'e': 'False'}
将字典中的所有key设置为小写
dict3 = {key.lower():value for key,value in dict1.items()}
{'a': 10, 'b': 20, 'c': True, 'd': 'hello world', 'e': 'False'}
(2)语法二:
key:字典中的key
value:字典中的value
dict.items():序列
condition:条件表达式
key_exp:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp处理
value_exp1:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp1处理
value_exp2:在for循环中,如果条件表达式condition不成立(即条件表达式不成立),返回对应的key,value并作key_exp,value_exp2处理
{key_exp:value_exp1 if condition else value_exp2 for key,value in dict.items()}
实例:
dict1 = {"a":10,"B":20,"C":True,"D":"hello world","e":"False"}
将字典中所有key是小写字母的value统一赋值为'error'
dict4={key:value if key.isupper() else 'error' for key,value in dict1.items()}
dict4:{'a': 'error', 'B': 20, 'C': True, 'D': 'hello world', 'e': 'error'}
获取cookies并以字典的形式传参,如果cookies是字符串则需要转换为字典
cookies = "anonymid=jy0ui55o-u6f6zd; depovince=GW; _r01_=1; JSESSIONID=abcMktGLRGjLtdhBk7OVw; ick_login=a9b557b8-8138-4e9d-8601-de7b2a633f80; _ga=GA1.2.1307141854.1562980962;"
cookies = {cookie.split("=")[0]:cookie.split("=")[1] for cookie in cookies.split("; ")}
cookies:{'anonymid': 'jy0ui55o-u6f6zd', 'depovince': 'GW', '_r01_': '1', 'JSESSIONID': 'abcMktGLRGjLtdhBk7OVw', 'ick_login': 'a9b557b8-8138-4e9d-8601-de7b2a633f80', '_ga': 'GA1.2.1307141854.1562980962;'}
二、字典取差集
(1)字典推导式生成字典的方式
dict1 = {'ip_14':'000-000', 'mi_13':'dusdd', 'vivo_x80':'iuioo'}
dict2 = {'ip_14':'000-000', 'vivo_x80':'iuioo'}
通过判断在dict1中但是不在dict2中的键,并获取对应的键值,通过字典推导式,生成dict3,即dict1和dict2的差集。
dict3 = {key:dict1[key] for key in dict1 if key not in dict2}
dict3:{'mi_13': 'dusdd'}
(2) 通过set先将两个dict转为集合,然后利用集合可计算交集、差集、并集的特性,取两个字典的差集
dict1 = {'ip_14':'000-000', 'mi_13':'dusdd', 'vivo_x80':'iuioo'}
dict2 = {'ip_14':'000-000', 'vivo_x80':'iuioo'}
dict3 = set(dict1.items()) - set(dict2.items())
需要注意,做差后返回的dict3不是一个字典,而是一个集合。
dict3:{('mi_13', 'dusdd')}
三、字典批量去除某些键
字典的keys()或者items()可以直接求交集、差集和并集,values()不可以。
具体原因如下:字典的keys()方法会返回keys-view对象,这个对象直接支持集合操作,所以不需要将其转换为集合就可直接求解交集、差集和并集。字典的items()方法返回由(keys,value)对组成的items-view对象,这个对象也是直接支持集合操作的。
尽管字典的values()方法和keys()方法类似,但values()方法不支持集合操作。部分原因是因为在字典中键和值是不同的,从值的角度来看,并不能保证所有值都是唯一的。所以,如果相对values()方法进行集合操作,必须先将值转化为集合。
批量去掉某些键:
dict1 = {'ip_14':'000-000', 'mi_13':'dusdd', 'vivo_x80':'iuioo'}
dict2 = {'ip_14':'000-000', 'vivo_x80':'iuioo'}
dict3 = {key:dict1[key] for key in dict1.keys() - {'mi_13', 'mi_12'}}
dict3:{'vivo_x80': 'iuioo', 'ip_14': '000-000'}
四、字典拆分
(1)将字典拆分成两个字典
使用items()+len()+列表切片
test_dict = {'ip_14':'000-000', 'mi_13':'dusdd', 'vivo_x80':'iuioo', 'huawei_mate50':'ddiejfs'}
res1 = dict(list(test_dict.items())[len(test_dict)//2:])
res2 = dict(list(test_dict.items())[:len(test_dict)//2])
五、一个键对应多个值
(1)使用list作为dict的值 值允许重复'
dict1={}
key=1
value=2
dict1.setdefault(key, []).append(value)
dict1.setdefault(key, []).append(value)
dict1:{1: [2, 2]}
也可以一次加两个值:
dict1.setdefault(key, []).extend([value, value])
dict1:{1: [2, 2, 2, 2]}
(2)使用子字典作为dict的值 值不允许重复
dict1={}
key=1
value=3
key2=3
dict1.setdefault(key, {})[key2]=value
dict1:{1: {3: 3}}
key2=4
value=4
dict1.setdefault(key, {})[key2]=value
dict1:{1: {3: 2, 4: 4}}
(3)使用set作为dict的值 值不允许重复
dict1={}
key=1
value=3
dict1.setdefault(key,set()).add(value)
dict1:{1: {3}}
value=3
dict1.setdefault(key,set()).add(value)
dict1:{1: {3}}
value=4
dict1.setdefault(key,set()).add(value)
dict1:{1: {3, 4}}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~