python中字典解析式

原创
小哥 3年前 (2022-10-29) 阅读数 59 #大杂烩

目录

1.词典派生:

2.语法:

1,语法一:

2,语法二:

3.词典派生实战:

1提取或修改字典中的数据,并返回新字典:

2提取字符串中的数据并返回新字典:

3,Will字符串 "k:1|k1:2|k2:3|k3:4",加工成词典。 {k:1,k1:2,...}:

4,生成一个包含5随机数词典:

5,将两个相同长度的列表合并到一个词典中:

6、将key同一字母的中间和小写字母value值求和:

7,都会收录在词典里。key、value交换位置:


1.词典派生:

字典派生类似于列表派生,但也通过循环和条件判断表达式。不同之处在于,字典派生返回值是一个字典,因此需要编写整个表达式{}内部。

2.语法:

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处理

3.词典派生实战:

1提取或修改字典中的数据,并返回新字典:

dictionary_1 = {a: 1234, B: FFFF, c:  23432, D: 124fgr, e: eeeee, F: QQQQQ}

# 案例1:拿起字典。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)

# 案例3:把所有的东西都放在字典里。key是小写的value统一分配是error
new_dict_5 = {key: value if not key.islower() else error for key, value in dictionary_1.items()} # if条件表达式使用“NON”的逻辑
# 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,Will字符串 "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: 巨蟹座}

"""

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}
"""

摘要:词典派生的所有示例都是可以理解的。

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门