Introducción concisa al módulo Collections

PythonPythonBeginner
Practicar Ahora

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í

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.

Ejemplo: Contando cosas

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.

Contadores

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

Ejemplo: Mapeos de Uno a Varios

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.

Ejemplo: Conservar un historial

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

Ejercicio 2.18: Tabulando con Contadores

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.

Comentario: módulo collections

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.

Resumen

¡Felicitaciones! Has completado el laboratorio del módulo Collections. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.