Introducción
El módulo collections
proporciona una serie de objetos útiles para el manejo de datos. Esta parte presenta brevemente algunas de estas características.
This tutorial is from open-source community. Access the source code
💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí
El módulo collections
proporciona una serie de objetos útiles para el manejo de datos. Esta parte presenta brevemente algunas de estas características.
Digamos que quieres tabular las acciones totales de cada empresa.
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)
]
Hay dos entradas de IBM
y dos entradas de GOOG
en esta lista. Las acciones deben combinarse de alguna manera.
Solución: Utiliza un Counter
.
from collections import Counter
total_shares = Counter()
for name, shares, price in portfolio:
total_shares[name] += shares
total_shares['IBM'] ## 150
Problema: Quieres mapear una clave a múltiples 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 en el ejemplo anterior, la clave IBM
debería tener dos tuplas diferentes en lugar de eso.
Solución: Utiliza un 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) ]
El defaultdict
asegura que cada vez que accedes a una clave obtienes un valor predeterminado.
Problema: Queremos un historial de las últimas N cosas. Solución: Utiliza un deque
.
from collections import deque
history = deque(maxlen=N)
with open(filename) as f:
for line in f:
history.append(line)
...
El módulo collections
podría ser uno de los módulos de biblioteca más útiles para tratar problemas de manipulación de datos con fines especiales, como la tabulación e indexación.
En este ejercicio, veremos algunos ejemplos simples. Comience ejecutando su programa report.py
para que tenga la cartera de acciones cargada en el modo interactivo.
$ python3 -i report.py
Supongamos que quisieras tabular el número total de acciones de cada empresa. Esto es fácil usando objetos Counter
. Intenta hacerlo:
>>> 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})
>>>
Observa cuidadosamente cómo las múltiples entradas de MSFT
y IBM
en portfolio
se combinan en una sola entrada aquí.
Puedes usar un Counter
exactamente como un diccionario para recuperar valores individuales:
>>> holdings['IBM']
150
>>> holdings['MSFT']
250
>>>
Si quieres clasificar los valores, haz esto:
>>> ## Obtener las tres empresas con más acciones
>>> holdings.most_common(3)
[('MSFT', 250), ('IBM', 150), ('CAT', 150)]
>>>
Tomemos otra cartera de acciones y creemos un nuevo 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, combinemos todas las carteras con una operación simple:
>>> 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})
>>>
Esto es solo un pequeño ejemplo de lo que ofrecen los contadores. Sin embargo, si alguna vez te encuentras necesitando tabular valores, deberías considerar usar uno.
El módulo collections
es uno de los módulos de biblioteca más útiles de todo Python. De hecho, podríamos hacer un tutorial extenso solo sobre eso. Sin embargo, hacerlo ahora también sería una distracción. Por ahora, pon collections
en tu lista de lectura antes de dormir para más adelante.
¡Felicitaciones! Has completado el laboratorio del módulo Collections. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.