一、字典推导式:
字典推导式和列表推导式类似,也是通过循环和条件判断表达式配合使用,不同的是字典推导式返回值是一个字典,所以整个表达式需要写在{}内部。
二、语法:
1、语法一:
new_dictionary = {key_exp:value_exp for key, value in dict.items() if condition}
字典推导式说明:
key:dict.items()字典中的key
value:dict.items()字典中的value
dict.items():序列
condition:if条件表达式
key_exp:在for循环中,如果if条件表达式condition成立(即条件表达式成立),返回对应的key,value当作key_exp,value_exp处理
value_exp:在for循环中,如果if条件表达式condition成立(即条件表达式成立),返回对应的key,value当作key_exp,value_exp处理
这样就返回一个新的字典。
2、语法二:
{key_exp:value_exp1 if condition else value_exp2 for key, value in dict.items()}
字典推导式说明:
key:dict.items()字典中的key
value:dict.items()字典中的value
dict.items():序列
condition:if条件表达式的判断内容
value_exp1:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp1处理
value_exp2:在for循环中,如果条件表达式condition不成立(即条件表达式不成立),返回对应的key,value并作key_exp,value_exp2处理
三、字典推导式实战:
1、在字典中提取或者修改数据,返回新的字典:
dictionary_1 = {'a': '1234', 'B': 'FFFF', 'c': ' 23432', 'D': '124fgr', 'e': 'eeeee', 'F': 'QQQQQ'}
# 案例一:获取字典中key值是小写字母的键值对 new_dict_1 = {key: value for key, value in dictionary_1.items() if key.islower()} new_dict_2 = {g: h for g, h in dictionary_1.items() if g.islower()} # g, h只是一个变量,使用任意字母都行,但是一定要前后保持一致。 print(new_dict_1) print(new_dict_2)
# 案例二:将字典中的所有key设置为小写 new_dict_3 = {key.lower(): value for key, value in dictionary_1.items()} # 将字典中的所有key设置为小写,value值设置为大写 new_dict_4 = {key.lower(): value.upper() for key, value in dictionary_1.items()} print(new_dict_3) print(new_dict_4)
# 案例三:将字典中所有key是小写字母的value统一赋值为'error' new_dict_5 = {key: value if not key.islower() else 'error' for key, value in dictionary_1.items()} # if条件表达式用到了“非”的逻辑 # value if not key.islower() else 'error' 这一段的代码的含义是: # 如果not key.islouer()--key值不是小写的,那么返回if前面的value值,否则就返回else后面的值。 print(new_dict_5) 执行结果如下图: """ {'a': '1234', 'c': ' 23432', 'e': 'eeeee'} {'a': '1234', 'c': ' 23432', 'e': 'eeeee'} {'a': '1234', 'b': 'FFFF', 'c': ' 23432', 'd': '124fgr', 'e': 'eeeee', 'f': 'QQQQQ'} {'a': '1234', 'b': 'FFFF', 'c': ' 23432', 'd': '124FGR', 'e': 'EEEEE', 'f': 'QQQQQ'} {'a': 'error', 'B': 'FFFF', 'c': 'error', 'D': '124fgr', 'e': 'error', 'F': 'QQQQQ'} """
2、在字符串中提取数据,返回新的字典:
# 在爬虫中,我们需要获取cookies并以字典的形式传参,如果cookies是字符串则需要转换为字典,经典代码案例如下:
# 原来的cookies很长,这里截取一部分做演示:
cookies = "anonymid=jy0ui55o-u6f6zd; depovince=GW; _r01_=1; JSESSIONID=abcMktGLRGjLtdhBk7OVw; ick_login=a9b557b8-8138-4e9d-8601-de7b2a633f80"
# 字典推导式,将长的字符串转化为字典。 new_dict_1 = {cookie.split("=")[0]: cookie.split("=")[1] for cookie in cookies.split(";")} print(new_dict_1) """ 代码分析: 在字符串cookies中’=’前面是key,’=’后面是value,每一个’;’构成一个键值对;多个键值对构成一个字典; 1.根据’;’将字符串拆分为列表; 2.根据第一步获取的列表,遍历时将每一个字符串根据’=’再次拆分; 3.根据第二步拆分的结果,列表第一个元素作为key,列表第二个元素作为value; """
new_dict_2 = {key: value for t in cookies.split(";") for key, value in (t.split("="),)}
# 先将字符串通过';'分解成短的带有等号的字符串,然后将这个短的字符串转化为元组,最后再通过'='分解成俩个值分别赋给key、value。
print(new_dict_2) """ # 下面是分解的演示: for t in cookies.split(';'): print(type(t)) print((t.split('='),)) print(type((t.split('='),))) print(cookies.split(';')) """
执行结果如下图:
""" {'anonymid': 'jy0ui55o-u6f6zd', ' depovince': 'GW', ' _r01_': '1', ' JSESSIONID': 'abcMktGLRGjLtdhBk7OVw', ' ick_login': 'a9b557b8-8138-4e9d-8601-de7b2a633f80'} {'anonymid': 'jy0ui55o-u6f6zd', ' depovince': 'GW', ' _r01_': '1', ' JSESSIONID': 'abcMktGLRGjLtdhBk7OVw', ' ick_login': 'a9b557b8-8138-4e9d-8601-de7b2a633f80'} """
3、将字符串 "k:1|k1:2|k2:3|k3:4",处理成字典 {k:1,k1:2,...}:
str = "k:1|k1:2|k2:3|k3:4" new_dict_1 = {key: value for t in str.split('|') for key, value in (t.split(':'),)} print(new_dict_1) new_dict_2 = {str_part.split(":")[0]: str_part.split(":")[1] for str_part in str.split('|')} print(new_dict_2)
# 可以用for循环将字符串转化成字典 new_dict_3 ={} for i in str.split('|'): # new_dict_3[i.split(":")[0]] = i.split(":")[1] key, value = i.split(':') new_dict_3[key] = value print(new_dict_3)
执行结果如下图:
""" {'k': '1', 'k1': '2', 'k2': '3', 'k3': '4'} {'k': '1', 'k1': '2', 'k2': '3', 'k3': '4'} {'k': '1', 'k1': '2', 'k2': '3', 'k3': '4'} """
4、生成一个包含5个随机数的字典:
# 生成一个包含5个随机数的字典 import random new_dict_1 = {key:random.randint(10, 100) for key in range(1,6)} print(new_dict_1)
执行结果如下图:
""" {1: 65, 2: 60, 3: 54, 4: 29, 5: 53} """
5、将两个长度相同的列表合并成字典:
# 将两个长度相同的列表合并成字典 name = ['zhangsan', 'lisi', 'wangwu', 'maliu'] sign = ['双鱼座', '天蝎座', '水瓶座', '巨蟹座'] new_dict_2 = {name: value for name, value in zip(name, sign)} print(new_dict_2) print(type(zip(name,sign)))
执行结果如下图;
""" {'zhangsan': '双鱼座', 'lisi': '天蝎座', 'wangwu': '水瓶座', 'maliu': '巨蟹座'} <class 'zip'> """
6、将key中大小写相同的字母的value值求和:
# 将key中大小写相同的字母的value值求和 dict_a = {'a': 2, 'B': 5, 'A': 7, 'C': 10} new_dict_1 = {key.lower(): dict_a.get(key.lower(), 0) + dict_a.get(key.upper(), 0) for key in dict_a.keys() if key.lower() in ['a', 'b']} print(new_dict_1)
执行结果如下图:
""" {'a': 9, 'b': 5} """
7、将字典中key、value互换位置:
# 将字典中key、value互换位置 d = {1: 'a', 2: 'b', 3: 'c'} dd = {key: value for value, key in d.items()} print(d) print(dd)
执行结果如下图:
""" {1: 'a', 2: 'b', 3: 'c'} {'a': 1, 'b': 2, 'c': 3} """
总结:全是字典推导式的实例,一定可以理解字典推导式。
本篇文章链接 地址:https://wmzos.com/?id=93
添加新评论