国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python里超級好用的字典模塊:Addict 模塊

Python里超級好用的字典模塊:Addict 模塊

2021-08-28 00:10菜鳥學Python Python

Addit 是一個Python模塊,除了提供標準的字典語法外,Addit 生成的字典的值既可以使用屬性來獲取,也可以使用屬性進行設置。

Python里超級好用的字典模塊:Addict 模塊

Addit 是一個Python模塊,除了提供標準的字典語法外,Addit 生成的字典的值既可以使用屬性來獲取,也可以使用屬性進行設置。

這意味著你不用再寫這樣的字典了:

  1. body = {  
  2.     'query': {  
  3.         'filtered': {  
  4.             'query': {  
  5.                 'match': {'description': 'addictive'}  
  6.             },  
  7.             'filter': {  
  8.                 'term': {'created_by': 'Mats'}  
  9.             }  
  10.         }  
  11.     }  

相反,你只需編寫以下三行代碼就能完成目的:

  1. body = Dict()  
  2. body.query.filtered.query.match.description = 'addictive'  
  3. body.query.filtered.filter.term.created_by = 'Mats' 

1.安裝

你可以通過 pip 安裝:

  1. pip install addict 

或通過 conda :

  1. conda install addict -c conda-forge 

Addit 在Python2.7+和Python3上都可以運行。

2.用法

Addict 繼承自字典,但在訪問和設置其值方面更加靈活。使用 Addict 的字典是一種樂趣!

設置嵌套詞典的項是極其舒服的:

  1. >>> from addict import Dict  
  2. >>> mapping = Dict()  
  3. >>> mapping.a.b.c.d.e = 2  
  4. >>> mapping  
  5. {'a': {'b': {'c': {'d': {'e': 2}}}}} 

如果Dict是用任何可迭代值實例化的,它將遍歷并克隆這些值,然后寫入到對應的屬性及值中,比如:

  1. >>> mapping = {'a': [{'b': 3}, {'b': 3}]}  
  2. >>> dictionary = Dict(mapping)  
  3. >>> dictionary.a[0].b  

但 mapping['a'] 不再與 dictionary['a'] 相同。

  1. >>> mapping['a'] is dictionary['a']  
  2. False 

當然,此特點僅限于構造函數,而不是在使用屬性或設置值時:

  1. >>> a = Dict()  
  2. >>> b = [1, 2, 3]  
  3. >>> a.b = b  
  4. >>> a.b is b  
  5. True 

3.要牢記的事情

記住, int 不是有效的屬性名,因此必須使用 get/setitem 語法 設置/獲取 非字符串的 dict 鍵:

  1. >>> addicted = Dict()  
  2. >>> addicted.a.b.c.d.e = 2  
  3. >>> addicted[2] = [1, 2, 3]  
  4. {2: [1, 2, 3], 'a': {'b': {'c': {'d': {'e': 2}}}}} 

不過,你可以隨意混合使用這兩種語法:

  1. >>> addicted.a.b['c'].d.e  

4.屬性,如鍵、item等

Addit 不會讓你覆蓋 dict 的屬性,因此以下操作將不起作用:

  1. >>> mapping = Dict()  
  2. >>> mapping.keys = 2  
  3. Traceback (most recent call last):  
  4. File "<stdin>", line 1, in <module>  
  5.  File "addict/addict.py", line 53, in __setattr__  
  6.  raise AttributeError("'Dict' object attribute '%s' is read-only" % name)  
  7. AttributeError: 'Dict' object attribute 'keys' is read-only 

不過,使用下面這種方式就可以:

  1. >>> a = Dict()  
  2. >>> a['keys'] = 2  
  3. >>> a  
  4. {'keys': 2}  
  5. >>> a['keys']  

5.默認值

對于不在字典中的鍵,Addit的行為如 defaultdict(Dict) ,因此丟失的鍵返回一個空的 Dict 而不是拋出 KeyError 如果此行為不是所需的,則可以使用以下方式恢復拋出KeyError:

  1. >>> class DictNoDefault(Dict):  
  2. >>>   def __missing__(self, key):  
  3. >>>     raise KeyError(key) 

但請注意,這樣會失去速記賦值功能(addicted.a.b.c.d.e = 2 )

6.轉化為普通字典

如果你覺得將 Addict 傳遞到其他函數或模塊并不安全,請使用 to_dict() 方法,它返回會把 Addict 轉化為普通字典。

  1. >>> regular_dict = my_addict.to_dict()  
  2. >>> regular_dict.a = 2  
  3. Traceback (most recent call last):  
  4. File "<stdin>", line 1, in <module>  
  5.  AttributeError: 'dict' object has no attribute 'a' 

當您希望在幾行代碼中創建嵌套的字典,然后將其發送到不同的函數或模塊時,這非常適合:

  1. body = Dict()  
  2. body.query.filtered.query.match.description = 'addictive'  
  3. body.query.filtered.filter.term.created_by = 'Mats'  
  4. third_party_module.search(query=body.to_dict()) 

7.計數

Dict 輕松訪問和修改深度嵌套屬性的能力使其成為計數的理想選擇。使用Addict,你還可以容易允許按多個級別計數,內部使用的原理是collections.Counter 。

比如以下數據:

  1. data = [  
  2.     {'born': 1980, 'gender': 'M', 'eyes': 'green'},  
  3.     {'born': 1980, 'gender': 'F', 'eyes': 'green'},  
  4.     {'born': 1980, 'gender': 'M', 'eyes': 'blue'},  
  5.     {'born': 1980, 'gender': 'M', 'eyes': 'green'},  
  6.     {'born': 1980, 'gender': 'M', 'eyes': 'green'},  
  7.     {'born': 1980, 'gender': 'F', 'eyes': 'blue'},  
  8.     {'born': 1981, 'gender': 'M', 'eyes': 'blue'},  
  9.     {'born': 1981, 'gender': 'F', 'eyes': 'green'},  
  10.     {'born': 1981, 'gender': 'M', 'eyes': 'blue'},  
  11.     {'born': 1981, 'gender': 'F', 'eyes': 'blue'},  
  12.     {'born': 1981, 'gender': 'M', 'eyes': 'green'},  
  13.     {'born': 1981, 'gender': 'F', 'eyes': 'blue'}  

如果你想計算有多少人出生在born性別的gender使用eyes眼睛,你可以很容易地計算出這些信息:

  1. counter = Dict()  
  2. for row in data:  
  3.     born = row['born']  
  4.     gender = row['gender']  
  5.     eyes = row['eyes']  
  6.     counter[born][gender][eyes] += 1 print(counter)  
  7. # 結果:{1980: {'M': {'blue': 1, 'green': 3}, 'F': {'blue': 1, 'green': 1}}, 1981: {'M': {'blue': 2, 'green': 1}, 'F': {'blue': 2, 'green': 1}}} 

8.更新

普通字典的更新方式如下:

  1. >>> d = {'a': {'b': 3}}  
  2. >>> d.update({'a': {'c': 4}})  
  3. >>> print(d)  
  4. {'a': {'c': 4}} 

addict 的更新方式如下,它會遞歸并實際更新嵌套的字典:

  1. >>> D = Dict({'a': {'b': 3}})  
  2. >>> D.update({'a': {'c': 4}})  
  3. >>> print(D)  
  4. {'a': {'b': 3, 'c': 4}} 

9.Addict 是怎么來的?

這個模塊完全是從用Python創建Elasticsearch查詢的繁瑣過程中發展而來的。每當你發現自己在寫了很復雜的字典邏輯時,只要記住你沒有必要這樣做,使用 Addict 就行。

我們的文章到此就結束啦,如果你喜歡今天的Python 實戰教程,請持續關注我們!

原文地址:https://mp.weixin.qq.com/s/UhiQ9GB3k0SN_tvkd6YbGA

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 成人免费网站在线观看 | 成人免费一区二区三区视频网站 | 国产精品原创av片国产免费 | 亚洲视频在线观看网址 | 日韩午夜激情 | 黄色网毛片 | 成年人免费观看网站 | 国产色婷婷 | 午夜午夜精品一区二区三区文 | 人人草天天草 | 91正在播放 | 日韩中文字幕在线观看 | 中文字幕第七页 | 91精品一区二区三区久久久久久 | 美女视频一区 | 免费在线观看一区二区 | 在线一区二区三区四区 | 成人av在线网 | 日韩欧美视频免费在线观看 | 国产精品视频免费 | 日本视频网 | 国产在线观看一区 | 亚洲精品一区二三区 | 日韩精品色 | 久久久久久亚洲精品 | 日韩成人精品在线 | 婷婷综合色 | 色偷偷888欧美精品久久久 | 一区二区三区在线播放 | 久久久久久国产精品mv | 中文字幕在线免费 | 精品欧美一区二区三区久久久 | 99精品欧美一区二区蜜桃免费 | 欧洲一级视频 | 国产一区亚洲二区三区 | 日日麻批免费视频40分钟 | 日韩成人免费中文字幕 | 色综合天天综合网国产成人综合天 | av一二三区| 日韩高清在线一区 | 免费色视频|