python中的字典推导式_17.python 字典推导式(经典代码)
在昨天的文章中,我們介紹了關(guān)于** python列表推導(dǎo)式** 的使用,字典推導(dǎo)式使用方法其實(shí)也類似,也是通過(guò)循環(huán)和條件判斷表達(dá)式配合使用,不同的是字典推導(dǎo)式返回值是一個(gè)字典,所以整個(gè)表達(dá)式需要寫(xiě)在{}內(nèi)部。
一.字典推導(dǎo)式語(yǔ)法
'''
語(yǔ)法一:
key:字典中的key
value:字典中的value
dict.items():序列
condition:條件表達(dá)式
key_exp:在for循環(huán)中,如果條件表達(dá)式condition成立(即條件表達(dá)式成立),返回對(duì)應(yīng)的key,value并作key_exp,value_exp處理
value_exp:在for循環(huán)中,如果條件表達(dá)式condition成立(即條件表達(dá)式成立),返回對(duì)應(yīng)的key,value并作key_exp,value_exp處理
'''
{key_exp:value_exp for key,value in dict.items() if condition}
'''
語(yǔ)法二:
key:字典中的key
value:字典中的value
dict.items():序列
condition:條件表達(dá)式
key_exp:在for循環(huán)中,如果條件表達(dá)式condition成立(即條件表達(dá)式成立),返回對(duì)應(yīng)的key,value并作key_exp,value_exp處理
value_exp1:在for循環(huán)中,如果條件表達(dá)式condition成立(即條件表達(dá)式成立),返回對(duì)應(yīng)的key,value并作key_exp,value_exp1處理
value_exp2:在for循環(huán)中,如果條件表達(dá)式condition不成立(即條件表達(dá)式不成立),返回對(duì)應(yīng)的key,value并作key_exp,value_exp2處理
'''
{key_exp:value_exp1 if condition else value_exp2 for key,value in dict.items()}
二.字典推導(dǎo)式實(shí)戰(zhàn)
在以下的內(nèi)容中涉及到字符串的大小寫(xiě)轉(zhuǎn)換/拆分等函數(shù),不熟悉使用的可以先熟悉以下字符串相關(guān)操作:python字符串.
1.在字典中提取或者修改數(shù)據(jù),返回新的字典
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解憂
@Blog(個(gè)人博客地址): shuopython.com
@WeChat Official Account(微信公眾號(hào)):猿說(shuō)python
@Github:www.github.com
@File:python_dict.py
@Time:2019/10/1 21:48
@Motto:不積跬步無(wú)以至千里,不積小流無(wú)以成江海,程序人生的精彩需要堅(jiān)持不懈地積累!
"""
# 案例一:獲取字典中key值是小寫(xiě)字母的鍵值對(duì)
dict1 = {"a":10,"B":20,"C":True,"D":"hello world","e":"python教程"}
dict2 = {key:value for key,value in dict1.items() if key.islower()}
print(dict2)
# 案例二:將字典中的所有key設(shè)置為小寫(xiě)
dict3 = {key.lower():value for key,value in dict1.items() }
print(dict3)
# 案例三:將字典中所有key是小寫(xiě)字母的value統(tǒng)一賦值為'error'
dict4 = {key:value if key.isupper() else "error" for key,value in dict1.items() }
print(dict4)
輸出結(jié)果:
{'a': 10, 'e': 'python教程'}
{'a': 10, 'b': 20, 'c': True, 'd': 'hello world', 'e': 'python教程'}
{'a': 'error', 'B': 20, 'C': True, 'D': 'hello world', 'e': 'error'}
2.在字符串中提取數(shù)據(jù),返回新的字典
在后期的爬蟲(chóng)課程中,我們需要獲取cookies并以字典的形式傳參,如果cookies是字符串則需要轉(zhuǎn)換為字典,經(jīng)典代碼案例如下:
cookies = "anonymid=jy0ui55o-u6f6zd; depovince=GW; _r01_=1; JSESSIONID=abcMktGLRGjLtdhBk7OVw; ick_login=a9b557b8-8138-4e9d-8601-de7b2a633f80; _ga=GA1.2.1307141854.1562980962; _gid=GA1.2.201589596.1562980962; _c1=-100; first_login_flag=1; ln_uact=18323008898; ln_hurl=http://head.xiaonei.com/photos/0/0/men_main.gif; jebe_key=88f1340c-592c-4dd6-a738-128a76559f45%7Cad33b3c730fcdc8df220648f0893e840%7C1562981108370%7C1%7C1562981106763; jebe_key=88f1340c-592c-4dd6-a738-128a76559f45%7Cad33b3c730fcdc8df220648f0893e840%7C1562981108370%7C1%7C1562981106765; jebecookies=793eb32e-92c6-470d-b9d0-5f924c335d30|||||; _de=E77807CE44886E0134ABF27E72CFD74F; p=a00d65b1f779614cd242dc719e24c73e0; t=292ba8729a4151c1a357e176d8d91bff0; societyguester=292ba8729a4151c1a357e176d8d91bff0; id=969937120; xnsid=1700b2cc; ver=7.0; loginfrom=null; wp_fold=0"
# 字典推導(dǎo)式
cookies = {cookie.split("=")[0]:cookie.split("=")[1] for cookie in cookies.split("; ")}
print(cookies)
輸出結(jié)果:
{'anonymid': 'jy0ui55o-u6f6zd', 'depovince': 'GW', '_r01_': '1', 'JSESSIONID': 'abcMktGLRGjLtdhBk7OVw', 'ick_login': 'a9b557b8-8138-4e9d-8601-de7b2a633f80', '_ga': 'GA1.2.1307141854.1562980962', '_gid': 'GA1.2.201589596.1562980962', '_c1': '-100', 'first_login_flag': '1', 'ln_uact': '18323008898', 'ln_hurl': 'http://head.xiaonei.com/photos/0/0/men_main.gif', 'jebe_key': '88f1340c-592c-4dd6-a738-128a76559f45%7Cad33b3c730fcdc8df220648f0893e840%7C1562981108370%7C1%7C1562981106765', 'jebecookies': '793eb32e-92c6-470d-b9d0-5f924c335d30|||||', '_de': 'E77807CE44886E0134ABF27E72CFD74F', 'p': 'a00d65b1f779614cd242dc719e24c73e0', 't': '292ba8729a4151c1a357e176d8d91bff0', 'societyguester': '292ba8729a4151c1a357e176d8d91bff0', 'id': '969937120', 'xnsid': '1700b2cc', 'ver': '7.0', 'loginfrom': 'null', 'wp_fold': '0'}
代碼分析:
在字符串cookies中’=’前面是key,’=’后面是value,每一個(gè)’;’構(gòu)成一個(gè)鍵值對(duì);多個(gè)鍵值對(duì)構(gòu)成一個(gè)字典;
1.根據(jù)’;’將字符串拆分為列表;
2.根據(jù)第一步獲取的列表,遍歷時(shí)將每一個(gè)字符串根據(jù)’=’再次拆分;
3.根據(jù)第二步拆分的結(jié)果,列表第一個(gè)元素作為key,列表第二個(gè)元素作為value;
代碼
三.重點(diǎn)總結(jié)
字典推導(dǎo)式和列表推導(dǎo)式的效率均比普通的for循環(huán)效率更高,注意字典推導(dǎo)式與列表推導(dǎo)式的區(qū)別:
1.列表推導(dǎo)式返回列表,表達(dá)式在中括號(hào)[]中
2.字典推導(dǎo)式返回字典,表達(dá)式在大括號(hào){}中
猜你喜歡:
1.python列表推導(dǎo)式
2.python字典
3.python列表
4.python for循環(huán)
轉(zhuǎn)載請(qǐng)注明:猿說(shuō)Python ? python字典推導(dǎo)式
技術(shù)交流、商務(wù)合作請(qǐng)直接聯(lián)系博主,微信掃碼或搜索:猿說(shuō)python
python教程公眾號(hào)
總結(jié)
以上是生活随笔為你收集整理的python中的字典推导式_17.python 字典推导式(经典代码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 软件包管理 之 fedora-rpmde
- 下一篇: C++之STL理论基础