日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Python collections 模块 namedtuple、Counter、defaultdict

發布時間:2023/11/27 生活经验 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python collections 模块 namedtuple、Counter、defaultdict 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. namedtuple

假設有兩個列表,如下,要判斷兩個列表中的某一個索引值是否相等。

In [7]: p = ['001', 'wohu', '100', 'Shaanxi']In [8]: t = ['002', 'tom', '20', 'Beijing']In [9]: p[0] == t[0]
Out[9]: FalseIn [10]: p[3] == t[3]
Out[10]: False

這樣的話代碼中會存在很多用于取值的索引值,導致代碼的可讀性并不太好,而 collections 模塊的 namedtuple 很好的解決了這個問題。

In [1]: from collections import namedtupleIn [2]: person = namedtuple("Person", ['id', 'name', 'age', 'address'])In [3]: p = person('001', 'wohu', '100', 'Shaanxi')In [4]: t = person('002', 'tom', '20', 'Beijing')In [5]: p.id
Out[5]: '001'In [6]: p.id == t.id
Out[6]: False

聯系之前自己寫的代碼,完全可以用這個替代,而且可讀性還比較好。

if img_result[5] == "car":      # img_result[5] is car typeimg_display_type += 1if img_result[7] == "black":    # img_result[7] is car colourimg_display_colour += 1if img_result[9] == 1:      	# img_result[9] is thief flagimg_display_thief += 1if img_result[10] == 1:img_display_orientation += 1if img_result[11] == 1:     	# img_result[11] is person flagimg_display_person += 1

2. Counter

Counter 正如名字那樣,它的主要功能就是計數。

In [18]: from collections import CounterIn [19]: s = "abcdefabcdaba"In [20]: c = Counter(s)In [21]: c.most_common()	# 統計每個字符出現的次數
Out[21]: [('a', 4), ('b', 3), ('c', 2), ('d', 2), ('e', 1), ('f', 1)]In [22]: sorted(c)	# 對字符按照出現次數由多到少排序
Out[22]: ['a', 'b', 'c', 'd', 'e', 'f']In [23]: c['a']		# 獲取每個字符出現的次數
Out[23]: 4In [24]: c.get('a')
Out[24]: 4In [25]: 

3. DefaultDict

DefaultDict 能自動創建一個被初始化的字典,也就是每個鍵都已經被訪問過一次。在實際開發中經常會寫類似下面的代碼,即判斷一個鍵是否在字典中,如果不在則給該字典對應的鍵賦值空列表或者字典,如果在,則進行某種賦值等。

In [38]: d = {}In [39]: k = ['a','b', 'c', 'a']In [40]: for i in k:...:     if i not in d:...:         d[i] = []...:     else:...:         d[i].append('x')...:         In [41]: d
Out[41]: {'a': ['x'], 'b': [], 'c': []}

有了 defaultdict 就可以省略這個 if-else 分支,代碼如下:

  • 默認值為列表:
In [47]: from collections import defaultdictIn [48]: d = defaultdict(list)In [49]: d['a'].append('1')In [50]: d
Out[50]: defaultdict(list, {'a': ['1']})In [51]: d['b'].append('2')In [52]: d
Out[52]: defaultdict(list, {'a': ['1'], 'b': ['2']})
  • 默認值為字典:
In [53]: from collections import defaultdictIn [54]: d = defaultdict(dict)In [55]: d
Out[55]: defaultdict(dict, {})In [56]: d['a']['1'] = "a1"In [57]: d
Out[57]: defaultdict(dict, {'a': {'1': 'a1'}})In [58]: d['b']['2'] = "b2"In [59]: d
Out[59]: defaultdict(dict, {'a': {'1': 'a1'}, 'b': {'2': 'b2'}})
  • 默認值為整型
In [60]: d = defaultdict(int)In [61]: d
Out[61]: defaultdict(int, {})In [62]: d['a'] = 1In [63]: d['b'] = 2In [64]: d
Out[64]: defaultdict(int, {'a': 1, 'b': 2})

總結

以上是生活随笔為你收集整理的Python collections 模块 namedtuple、Counter、defaultdict的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。