每日一模組-collections

Alive_2020發表於2024-04-18

Python的collections模組提供了很多高階的資料結構,使得我們在處理資料時能夠更加方便和高效。下面我們將詳細講解collections模組中各個類的功能,並給出相應的樣例。

  1. 匯入模組
    首先,我們需要匯入collections模組:

import collections
2. Counter
Counter是一個字典子類,用於計數可雜湊物件。這裡我們用它來統計各國出現的次數。

from collections import Counter

一個包含各國名稱的列表

countries = ['China', 'USA', 'India', 'China', 'Brazil', 'USA', 'India', 'Russia', 'China']

使用Counter來統計每個國家出現的次數

country_counts = Counter(countries)

列印統計結果

print(country_counts)

輸出可能是:Counter({'China': 3, 'USA': 2, 'India': 2, 'Brazil': 1, 'Russia': 1})

找出出現次數最多的國家

most_common_country = country_counts.most_common(1)
print(most_common_country)

輸出可能是:[('China', 3)]

計算兩個Counter的合併

other_countries = ['Japan', 'Germany', 'USA', 'China']
other_counts = Counter(other_countries)
combined_counts = country_counts + other_counts
print(combined_counts)

輸出可能是:Counter({'China': 4, 'USA': 3, 'India': 2, 'Brazil': 1, 'Russia': 1, 'Japan': 1, 'Germany': 1})

從一個Counter中減去另一個Counter

country_counts -= Counter(['India', 'Brazil'])
print(country_counts)

輸出可能是:Counter({'China': 3, 'USA': 2, 'Russia': 1})

  1. deque
    deque是一個雙端佇列,支援從兩端新增和刪除元素。

from collections import deque

建立一個deque物件

d = deque()
d.append('China')
d.append('USA')
d.appendleft('India')

print(d) # 輸出:deque(['India', 'China', 'USA'])

從右端彈出元素

print(d.pop()) # 輸出:'USA'

從左端彈出元素

print(d.popleft()) # 輸出:'India'
4. defaultdict
defaultdict是一個字典子類,提供了預設值。

from collections import defaultdict

建立一個使用list作為預設值的defaultdict

dd = defaultdict(list)
dd['Asia'].append('China')
dd['Asia'].append('India')
dd['America'].append('USA')

print(dd) # 輸出:defaultdict(<class 'list'>, {'Asia': ['China', 'India'], 'America': ['USA']})

建立一個使用int作為預設值的defaultdict

dd_int = defaultdict(int)
print(dd_int['Europe']) # 輸出:0
5. namedtuple
namedtuple用於建立一個簡單的類,用於儲存具有固定欄位的資料。

from collections import namedtuple

建立一個名為Country的namedtuple,包含name和population兩個欄位

Country = namedtuple('Country', ['name', 'population'])

建立一個Country物件

china = Country(name='China', population=1400000000)

訪問欄位

print(china.name) # 輸出:'China'
print(china.population) # 輸出:1400000000
非常抱歉,確實沒有寫完。下面是OrderedDict和ChainMap的完整樣例,以及collections模組的總結。

  1. OrderedDict
    OrderedDict是一個保持元素插入順序的字典。

from collections import OrderedDict

建立一個OrderedDict物件

od = OrderedDict()
od['Asia'] = ['China', 'India']
od['America'] = ['USA', 'Brazil']
od['Europe'] = ['Russia', 'Germany']

遍歷有序字典

for continent, countries in od.items():
print(continent, countries)

輸出可能是:

Asia ['China', 'India']

America ['USA', 'Brazil']

Europe ['Russia', 'Germany']

移動元素到開頭

od.move_to_end('Asia', last=False)
print(od) # 輸出:OrderedDict([('Asia', ['China', 'India']), ('America', ['USA', 'Brazil']), ('Europe', ['Russia', 'Germany'])])

彈出元素

popped_item = od.popitem(last=False)
print(popped_item) # 輸出可能是:('Asia', ['China', 'India'])
print(od) # 輸出:OrderedDict([('America', ['USA', 'Brazil']), ('Europe', ['Russia', 'Germany'])])
7. ChainMap
ChainMap用於建立一個包含多個字典的單一檢視,可以在多個字典中查詢鍵。

from collections import ChainMap

建立兩個字典

dict1 = {'China': 'Asia', 'USA': 'America'}
dict2 = {'India': 'Asia', 'Brazil': 'America', 'Russia': 'Europe'}

使用ChainMap合併這兩個字典

chained_dict = ChainMap(dict1, dict2)

訪問鍵

print(chained_dict['China']) # 輸出:'Asia' (優先從dict1中查詢)
print(chained_dict['India']) # 輸出:'Asia' (從dict1中未找到,則從dict2中查詢)
print(chained_dict['Russia']) # 輸出:'Europe' (只在dict2中找到)

修改ChainMap中的值

chained_dict['China'] = 'New Asia'
print(chained_dict['China']) # 輸出:'New Asia'

新增新值

chained_dict['Japan'] = 'Asia'
print(chained_dict['Japan']) # 輸出:'Asia'

鏈中的字典可以動態變化

new_dict = {'Australia': 'Oceania'}
chained_dict.maps.append(new_dict)
print(chained_dict['Australia']) # 輸出:'Oceania'
collections模組總結
collections模組為Python提供了許多有用的資料結構,這些資料結構擴充套件了Python內建的資料型別,使得處理複雜資料更加高效和方便。

• Counter:用於計數可雜湊物件,返回一個字典,鍵是元素,值是計數。
• deque:雙端佇列,支援從兩端新增和刪除元素,適用於需要頻繁在兩端進行操作的場景。
• defaultdict:帶有預設值的字典,當訪問字典中不存在的鍵時,返回預設值,而不是引發錯誤。
• namedtuple:用於建立一個簡單的類,用於儲存具有固定欄位的資料,比直接使用字典更節省空間。
• OrderedDict:保持元素插入順序的字典,可以記住元素新增的順序。
• ChainMap:建立一個包含多個字典的單一檢視,可以在多個字典中查詢鍵,並按順序訪問它們。
這些資料結構在特定應用場景中提供了更加高效和直觀的處理方式,是Python程式設計師處理複雜資料的強大工具。根據具體需求,可以選擇合適的資料結構來最佳化程式碼。

相關文章