python字典推導式(17)

在昨天的文章中,咱們介紹了關於 python列表推導式 的使用,字典推導式使用方法其實也相似,也是經過循環和條件判斷表達式配合使用,不一樣的是字典推導式返回值是一個字典,因此整個表達式須要寫在{}內部。python

一.字典推導式語法


1git

2github

3微信

4cookie

5ide

6函數

7ui

8url

9spa

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

'''

語法一:

    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}

 

'''

語法二:

    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()}

 

二.字典推導式實戰

在如下的內容中涉及到字符串的大小寫轉換/拆分等函數,不熟悉使用的能夠先熟悉如下字符串相關操做:python字符串.

1.在字典中提取或者修改數據,返回新的字典


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

# !usr/bin/env python

# -*- coding:utf-8 _*-

"""

@Author:何以解憂

@Blog(我的博客地址): shuopython.com

@WeChat Official Account(微信公衆號):猿說python

@Github:www.github.com

@File:python_dict.py

@Time:2019/10/1 21:48

 

@Motto:不積跬步無以致千里,不積小流無以成江海,程序人生的精彩須要堅持不懈地積累!

"""

 

# 案例一:獲取字典中key值是小寫字母的鍵值對

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設置爲小寫

dict3 = {key.lower():value  for key,value in dict1.items() }

print(dict3)

 

# 案例三:將字典中全部key是小寫字母的value統一賦值爲'error'

dict4 = {key:value if key.isupper() else "error" for key,value in dict1.items() }

print(dict4)

輸出結果:

1

2

3

{'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.在字符串中提取數據,返回新的字典

在後期的爬蟲課程中,咱們須要獲取cookies並以字典的形式傳參,若是cookies是字符串則須要轉換爲字典,經典代碼案例以下:

1

2

3

4

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"

# 字典推導式

cookies = {cookie.split("=")[0]:cookie.split("=")[1] for cookie in cookies.split("; ")}

print(cookies)

輸出結果:

1

{'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,每個’;’構成一個鍵值對;多個鍵值對構成一個字典;

1.根據’;’將字符串拆分爲列表;

2.根據第一步獲取的列表,遍歷時將每個字符串根據’=’再次拆分;

3.根據第二步拆分的結果,列表第一個元素做爲key,列表第二個元素做爲value;

代碼

 

三.重點總結

字典推導式和列表推導式的效率均比普通的for循環效率更高,注意字典推導式與列表推導式的區別:

1.列表推導式返回列表,表達式在中括號[]中

2.字典推導式返回字典,表達式在大括號{}中

相關文章
相關標籤/搜索