Python collections 模块 namedtuple、Counter、defaultdict
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                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的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 古钱币多少钱啊?
- 下一篇: 求崩字开头的成语接龙!
