目录
一、字典推导式:
二、语法:
1、语法一:
2、语法二:
三、字典推导式实战:
1、在字典中提取或者修改数据,返回新的字典:
2、在字符串中提取数据,返回新的字典:
3、将字符串 "k:1|k1:2|k2:3|k3:4",处理成字典 {k:1,k1:2,...}:
4、生成一个包含5个随机数的字典:
5、将两个长度相同的列表合并成字典:
6、将key中大小写相同的字母的value值求和:
7、将字典中key、value互换位置:
一、字典推导式:
? ? 字典推导式和列表推导式类似,也是通过循环和条件判断表达式配合使用,不同的是字典推导式返回值是一个字典,所以整个表达式需要写在{}内部。
二、语法:
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}
"""
总结:全是字典推导式的实例,一定可以理解字典推导式。
|