Introdução
O módulo collections fornece vários objetos úteis para manipulação de dados. Esta seção introduz brevemente algumas dessas funcionalidades.
This tutorial is from open-source community. Access the source code
O módulo collections fornece vários objetos úteis para manipulação de dados. Esta seção introduz brevemente algumas dessas funcionalidades.
Digamos que você queira tabular o total de ações de cada ação.
portfolio = [
('GOOG', 100, 490.1),
('IBM', 50, 91.1),
('CAT', 150, 83.44),
('IBM', 100, 45.23),
('GOOG', 75, 572.45),
('AA', 50, 23.15)
]
Existem duas entradas IBM e duas entradas GOOG nesta lista. As ações precisam ser combinadas de alguma forma.
Solução: Use um Counter.
from collections import Counter
total_shares = Counter()
for name, shares, price in portfolio:
total_shares[name] += shares
total_shares['IBM'] ## 150
Problema: Você quer mapear uma chave para múltiplos valores.
portfolio = [
('GOOG', 100, 490.1),
('IBM', 50, 91.1),
('CAT', 150, 83.44),
('IBM', 100, 45.23),
('GOOG', 75, 572.45),
('AA', 50, 23.15)
]
Como no exemplo anterior, a chave IBM deve ter duas tuplas diferentes em vez disso.
Solução: Use um defaultdict.
from collections import defaultdict
holdings = defaultdict(list)
for name, shares, price in portfolio:
holdings[name].append((shares, price))
holdings['IBM'] ## [ (50, 91.1), (100, 45.23) ]
O defaultdict garante que toda vez que você acessa uma chave, você obtém um valor padrão.
Problema: Queremos um histórico das últimas N coisas. Solução: Use um deque.
from collections import deque
history = deque(maxlen=N)
with open(filename) as f:
for line in f:
history.append(line)
...
O módulo collections pode ser um dos módulos de biblioteca mais úteis para lidar com tipos especiais de problemas de manipulação de dados, como tabulação e indexação.
Neste exercício, veremos alguns exemplos simples. Comece executando seu programa report.py para que você tenha o portfólio de ações carregado no modo interativo.
$ python3 -i report.py
Suponha que você queira tabular o número total de ações de cada ação. Isso é fácil usando objetos Counter. Tente:
>>> portfolio = read_portfolio('portfolio.csv')
>>> from collections import Counter
>>> holdings = Counter()
>>> for s in portfolio:
holdings[s['name']] += s['shares']
>>> holdings
Counter({'MSFT': 250, 'IBM': 150, 'CAT': 150, 'AA': 100, 'GE': 95})
>>>
Observe cuidadosamente como as múltiplas entradas para MSFT e IBM em portfolio são combinadas em uma única entrada aqui.
Você pode usar um Counter como um dicionário para recuperar valores individuais:
>>> holdings['IBM']
150
>>> holdings['MSFT']
250
>>>
Se você quiser classificar os valores, faça o seguinte:
>>> ## Obter as três ações mais detidas
>>> holdings.most_common(3)
[('MSFT', 250), ('IBM', 150), ('CAT', 150)]
>>>
Vamos pegar outro portfólio de ações e criar um novo Counter:
>>> portfolio2 = read_portfolio('portfolio2.csv')
>>> holdings2 = Counter()
>>> for s in portfolio2:
holdings2[s['name']] += s['shares']
>>> holdings2
Counter({'HPQ': 250, 'GE': 125, 'AA': 50, 'MSFT': 25})
>>>
Finalmente, vamos combinar todas as participações fazendo uma operação simples:
>>> holdings
Counter({'MSFT': 250, 'IBM': 150, 'CAT': 150, 'AA': 100, 'GE': 95})
>>> holdings2
Counter({'HPQ': 250, 'GE': 125, 'AA': 50, 'MSFT': 25})
>>> combined = holdings + holdings2
>>> combined
Counter({'MSFT': 275, 'HPQ': 250, 'GE': 220, 'AA': 150, 'IBM': 150, 'CAT': 150})
>>>
Este é apenas um pequeno exemplo do que os contadores fornecem. No entanto, se você precisar tabular valores, deve considerar o uso de um.
O módulo collections é um dos módulos de biblioteca mais úteis em todo o Python. Na verdade, poderíamos fazer um tutorial estendido apenas sobre isso. No entanto, fazê-lo agora também seria uma distração. Por enquanto, coloque collections na sua lista de leitura para mais tarde.
Parabéns! Você concluiu o laboratório do Módulo Collections. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.