Saltar a contenido
 No os perd谩is mi futuro contenido, seguidme en y Youtube 馃榿

M贸dulo collections

El m贸dulo integrado de colecciones nos prove茅 otros tipos o mejoras de las colecciones cl谩sicas.

Contadores

La clase Counter es una subclase de diccionario utilizada para realizar cuentas:

Note

from collections import Counter

l = [1,2,3,4,1,2,3,1,2,1]
Counter(l)
Counter({1: 4, 2: 3, 3: 2, 4: 1})

Note

Counter("palabra")
Counter({'a': 3, 'b': 1, 'l': 1, 'p': 1, 'r': 1})

Note

animales = "gato perro canario perro canario perro"
c = Counter(animales.split())
priunt(c)
Counter({'canario': 2, 'gato': 1, 'perro': 3})

Algunas formas de utilizar un contador, sus m茅todos y conversiones:

Note

animales = "gato perro canario perro canario perro"
c = Counter(animales.split())

print(c.most_common(1))  # Primeros elemento m谩s repetido
print(c.most_common(2))  # Primeros dos elementos m谩s repetidos
print(c.most_common())   # Elementos ordenadores por repeticiones
[('perro', 3)]
[('perro', 3), ('canario', 2)]
[('perro', 3), ('canario', 2), ('gato', 1)]

Note

l = [10,20,30,40,10,20,30,10,20,10]
c = Counter(l)

print(c.items())        # Registros del contador por clave-valor
print(c.keys())         # Registros del contador por clave
print(c.values())       # Registros del contador por valor

print(sum(c.values()))  # Suma total de elementos del contador

print(list(c))          # Conversi贸n a lista
print(dict(c))          # Conversi贸n a conjunto
print(set(c))           # Conversi贸n a conjunto
dict_items([(40, 1), (10, 4), (20, 3), (30, 2)])
dict_keys([40, 10, 20, 30])
dict_values([1, 4, 3, 2])

10

[40, 10, 20, 30]
{10: 4, 20: 3, 30: 2, 40: 1}
{10, 20, 30, 40}

Diccionarios por defecto

La clase defaultdict se utilizan para crear diccionarios con un valor por defecto aunque el registro no haya sido definido anteriormente. Para ello hay que indicar un tipo de dato por defecto al diccionario:

Note

from collections import defaultdict

d = defaultdict(float)  # tipo flotante por defecto
print(d['algo'])
print(d)
0.0
defaultdict(float, {'algo': 0.0})

Note

d = defaultdict(str)  # tipo cadena por defecto
print(d['algo'])
print(d)
''
defaultdict(str, {'algo': ''})

Note

d = defaultdict(object)  # tipo objeto por defecto
print(d['algo'])
print(d)
<object at 0x1ad7f3201f0>
defaultdict(object, {'algo': <object at 0x1ad7f3201f0>})

Diccionarios ordenados

La clase OrderedDict es otra subclase de diccionario, pero esta vez con la capacidad de conservar el orden en que a帽adimos los registros:

Note

from collections import OrderedDict

n = OrderedDict()
n['uno'] = 'one'
n['dos'] = 'two'
n['tres'] = 'three'

print(n)
OrderedDict([('uno', 'one'), ('dos', 'two'), ('tres', 'three')])

El siguiente experimento permite comprobar como los diccionarios normales cambian el orden autom谩ticamente.

Dos diccionarios normales con los mismos elementos en orden distinto:

Note

n1 = {}
n1['uno'] = 'one'
n1['dos'] = 'two'

n2 = {}
n2['dos'] = 'two'
n2['uno'] = 'one'

# 驴Tienen los mismos elementos y en el mismo orden?
print(n1 == n2)
True

Dos diccionarios ordenados con los mismos elementos en orden distinto:

Note

n1 = OrderedDict()
n1['uno'] = 'one'
n1['dos'] = 'two'

n2 = OrderedDict()
n2['dos'] = 'two'
n2['uno'] = 'one'

# 驴Tienen los mismos elementos y en el mismo orden?
print(n1 == n2)
False

Tuplas con nombre

La subclase namedtuple es utilizada para crear peque帽as estructuras inmutables, parecidas a una clase y sus objetos, pero mucho m谩s simples:

Note

from collections import namedtuple

Persona = namedtuple('Persona','nombre apellido edad')
p = Persona(nombre="Hector",apellido="Costa",edad=27)

print(p)

# Podemos acceder a los elementos como si fueran atributos de un objeto
print(p.nombre)
print(p.edad)

# O utilizando 铆ndices como con las tuplas cl谩sicas
print(p[0])
print(p[-1])
Persona(nombre='Hector', apellido='Costa', edad=27)

'Hector'
27

'Hector'
27

脷ltima edici贸n: 2 de Octubre de 2018