Skip to content

Manejo de datos

Los conjuntos

Son colecciones desordenadas de elementos únicos utilizados para hacer pruebas de pertenencia a grupos y eliminación de elementos duplicados.

conjunto = set()
conjunto = {1,2,3}
print(conjunto)
{1, 2, 3}

Un conjunto auto-elimina elementos duplicados

test = {'Hector','Hector','Hector'}
print(test)
{'Hector'}

Método add()

Sirve para añadir elementos al conjunto. Si un elemento ya se encuentra, no se añadirá de nuevo.

conjunto = set()
conjunto = {1,2,3}
conjunto.add(4)
print(conjunto)
{1, 2, 3, 4}
conjunto.add(0)
print(conjunto)
{0, 1, 2, 3, 4}

lista a conjunto y viceversa

Es muy útil transformar listas a conjuntos para borrar los elementos duplicados automáticamente.

l = [1,2,3,3,2,1]
print(l)
[1, 2, 3, 3, 2, 1]

Convertir lista a conjunto

c = set(l)
print(c)
{1, 2, 3}

Convertir conjunto a lista

l = list(c)
print(l)
[1, 2, 3]

Conversion en una linea, lista --> conjunto --> lista

l = [1,2,3,3,2,1]
# En una línea
l = list( set( l ) )
print(l)
[1, 2, 3]

cadena a conjunto

Sirve para crear un conjunto con todos los caracteres de la cadena.

s = "Al pan pan y al vino vino"
print( set(s) )
{' ', 'A', 'a', 'i', 'l', 'n', 'o', 'p', 'v', 'y'}

Los diccionarios

Son junto a las listas las colecciones más utilizadas. Se basan en una estructura mapeada donde cada elemento de la colección se encuentra identificado con una clave única. Por tanto, no puede haber dos claves iguales. En otros lenguajes se conocen como arreglos asociativos.

vacio = {}
print(vacio)
{}

Tipo de variable

type(vacio)
dict

Sintaxis

Para cada elemento se define la estructura -> clave:valor

colores = {'amarillo':'yellow','azul':'blue'}

También se pueden añadir elementos sobre la marcha

colores['verde'] = 'green'
print(colores)
{'amarillo': 'yellow', 'azul': 'blue', 'verde': 'green'}
print(colores['azul'])
'blue'

Modificación de valor a partir de la clave

colores['amarillo'] = 'white'
print(colores)
{'amarillo': 'white', 'azul': 'blue', 'verde': 'green'}

Función del()

Sirve para borrar un elemento del diccionario.

del(colores['amarillo'])
print(colores)
{'azul': 'blue', 'verde': 'green'}

Directamente con registros

edades = {'Hector':27,'Juan':45,'Maria':34}
edades['Hector']+=1
print(edades)
{'Hector': 28, 'Juan': 45, 'Maria': 34}

Lectura secuencial con for

Es posible utilizar una iteración for para recorrer los elementos del diccionario:

for edad in edades:
    print(edad)
Maria
Hector
Juan

El problema es que se devuelven las claves, no los valores

Para solucionarlo deberíamos indicar la clave del diccionario para cada elemento.

for clave in edades:
    print(clave,edades[clave])
Maria 34
Hector 28
Juan 45

El método .items()

Nos facilita la lectura en clave y valor de los elementos porque devuelve ambos valores en cada iteración automáticamente:

for c,v in edades.items():
    print(c,v)
Maria 34
Hector 28
Juan 45

listas de disccionarios

Podemos crear nuestras propias estructuras avanzadas mezclando ambas colecciones. Mientras los diccionarios se encargarían de manejar las propiedades individuales de los registros, las listas nos permitirían manejarlos todos en conjunto.

personajes = []
p = {'Nombre':'Gandalf','Clase':'Mago','Raza':'Humano'} 
personajes.append(p)
print(personajes)
[{'Clase': 'Mago', 'Nombre': 'Gandalf', 'Raza': 'Humano'}]
p = {'Nombre':'Legolas','Clase':'Arquero','Raza':'Elfo'}
personajes.append(p)
p = {'Nombre':'Gimli','Clase':'Guerrero','Raza':'Enano'}
personajes.append(p)
print(personajes)
[{'Clase': 'Mago', 'Nombre': 'Gandalf', 'Raza': 'Humano'},
 {'Clase': 'Arquero', 'Nombre': 'Legolas', 'Raza': 'Elfo'},
 {'Clase': 'Guerrero', 'Nombre': 'Gimli', 'Raza': 'Enano'}]
for p in personajes:
    print(p['Nombre'], p['Clase'], p['Raza'])
Gandalf Mago Humano
Legolas Arquero Elfo
Gimli Guerrero Enano

Valor por defecto

Se utilizan para crear diccionarios con un valor por defecto aunque el registro no haya sido definido anteriormente.

d = {}
d['algo']
---------------------------------------------------------------------------

KeyError                                  Traceback (most recent call last)

<ipython-input-38-c4e2998bb821> in <module>()
----> 1 d['algo']
KeyError: 'algo'
from collections import defaultdict
d = defaultdict(float)
d['algo']
0.0
d
defaultdict(float, {'algo': 0.0})
d = defaultdict(str)
d['algo']
''
d
defaultdict(str, {'algo': ''})
d = defaultdict(object)
d['algo']
<object at 0x1ad7f3201f0>
d
defaultdict(object, {'algo': <object at 0x1ad7f3201f0>})
d = defaultdict(int)
d['algo'] = 10.5
d['algo']
10.5
d['algomas']
0
d
defaultdict(int, {'algo': 10.5, 'algomas': 0})
n = {}
n['uno'] = 'one'
n['dos'] = 'two'
n['tres'] = 'three'
n
{'dos': 'two', 'tres': 'three', 'uno': 'one'}

Diccionarios ordenados

Otra subclase de diccionario que conserva el orden en que añadimos los registros.

from collections import OrderedDict
n = OrderedDict()
n['uno'] = 'one'
n['dos'] = 'two'
n['tres'] = 'three'
n
OrderedDict([('uno', 'one'), ('dos', 'two'), ('tres', 'three')])
n1 = {}
n1['uno'] = 'one'
n1['dos'] = 'two'

n2 = {}
n2['dos'] = 'two'
n2['uno'] = 'one'
n1 == n2
True
n1 = OrderedDict()
n1['uno'] = 'one'
n1['dos'] = 'two'

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

Las pilas

Son colecciones de elementos ordenados que únicamente permiten dos acciones:

  • Añadir un elemento a la pila
  • Sacar un elemento de la pila

La peculiaridad es que el último elemento en entrar es el primero en salir. En inglés se conocen como estructuras LIFO (Last In First Out).

Las podemos crear como listas normales y añadir elementos al final con el append():

pila = [3,4,5]
pila.append(6)
pila.append(7)
print(pila)
[3, 4, 5, 6, 7]

Para sacar los elementos utilizaremos el método .pop():

Al utilizar pop() devolveremos el último elemento, pero también lo borraremos. Si queremos trabajar con él deberíamos asignarlo a una variable o lo perderemos:

pila.pop()
7
print(pila)
[3, 4, 5, 6]

Si hacemos pop() de una pila vacía, devolverá un error:

Debemos asegurarnos siempre de que la len() de la pila sea mayor que 0 antes de extraer un elemento automáticamente.

pila.pop()
---------------------------------------------------------------------------

IndexError                                Traceback (most recent call last)

<ipython-input-14-3900970cfbef> in <module>()
----> 1 pila.pop()
IndexError: pop from empty list

Las colas

Son colecciones de elementos ordenados que únicamente permiten dos acciones:

  • Añadir un elemento a la cola
  • Sacar un elemento de la cola

La peculiaridad es que el primer elemento en entrar es el primero en salir. En inglés se conocen como estructuras FIFO (First In First Out).

Debemos importar la colección deque manualmente para crear una cola:

from collections import deque

cola = deque()
print(cola)
deque([])

Podemos añadir elemento directamente pasando una lista a la cola al crearla:

cola = deque(['Hector','Juan','Miguel'])
print(cola)
deque(['Hector', 'Juan', 'Miguel'])

Y también utilizando el método .append():

cola.append('Maria')
cola.append('Arnaldo')
print(cola)
deque(['Hector', 'Juan', 'Miguel', 'Maria', 'Arnaldo'])

A la hora de sacar los elementos utilizaremos el método popleft() para extraerlos por la parte izquierda (el principio de la cola).

cola.popleft()
'Hector'
print(cola)
deque(['Juan', 'Miguel', 'Maria', 'Arnaldo'])
cola.popleft()
'Juan'
print(cola)
deque(['Miguel', 'Maria', 'Arnaldo'])