日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Python collections 模块 namedtuple、Counter、defaultdict

發(fā)布時(shí)間:2023/11/27 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python collections 模块 namedtuple、Counter、defaultdict 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. namedtuple

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

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

這樣的話代碼中會(huì)存在很多用于取值的索引值,導(dǎo)致代碼的可讀性并不太好,而 collections 模塊的 namedtuple 很好的解決了這個(gè)問(wèn)題。

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

聯(lián)系之前自己寫(xiě)的代碼,完全可以用這個(gè)替代,而且可讀性還比較好。

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 正如名字那樣,它的主要功能就是計(jì)數(shù)。

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

3. DefaultDict

DefaultDict 能自動(dòng)創(chuàng)建一個(gè)被初始化的字典,也就是每個(gè)鍵都已經(jīng)被訪問(wèn)過(guò)一次。在實(shí)際開(kāi)發(fā)中經(jīng)常會(huì)寫(xiě)類似下面的代碼,即判斷一個(gè)鍵是否在字典中,如果不在則給該字典對(duì)應(yīng)的鍵賦值空列表或者字典,如果在,則進(jìn)行某種賦值等。

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 就可以省略這個(gè) if-else 分支,代碼如下:

  • 默認(rèn)值為列表:
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']})
  • 默認(rèn)值為字典:
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'}})
  • 默認(rèn)值為整型
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})

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。