Listas y Diccionarios en Python

Publicado: sáb, 10 de junio de 2023

Python Lists and Dictionaries
Python Lists and Dictionaries

Entre las muchas estructuras de datos en Python, las listas y los diccionarios son quizás las más comunes, esto podría deberse a su versatilidad. Podemos usar estas estructuras de diferentes maneras poderosas para representar muchos tipos de datos.

Las listas, como su nombre lo indica, son colecciones ordenadas de datos que se pueden acceder por índice. A diferencia de otros lenguajes de programación como Javascript, los datos no tienen que ser del mismo tipo. Esto significa que podemos tener listas que contengan cadenas, enteros, flotantes e incluso otras listas o diccionarios.

# Definir una lista de colores
colores = ['rojo', 'verde', 'azul', 'amarillo', 'naranja', 'morado']
 
# Podemos imprimir estos valores uno por uno iterando sobre la lista
print('=== Iterando sobre la lista ===')
for color in colores:
    print(color)
 
# Pero también podemos imprimir solo uno de ellos haciendo referencia al índice
print('=== Imprimiendo uno de los colores haciendo referencia al índice ===')
print(colores[2])
 
# Las listas, al igual que los vectores o arreglos en otros lenguajes, comienzan en el índice 0
# Por lo tanto, el primer color está en el índice 0, el segundo en el índice 1, etc.
 
# Pero también podemos agregar más colores a la lista
colores.append('negro')
print('=== Imprimiendo la lista después de agregar un color ===')
print(colores)

Resultado:

=== Iterando sobre la lista === rojo verde azul amarillo naranja morado === Imprimiendo uno de los colores haciendo referencia al índice === azul === Imprimiendo la lista después de agregar un color === ['rojo', 'verde', 'azul', 'amarillo', 'naranja', 'morado', 'negro']

Podemos también seleccionar un color aleatorio de la lista haciendo referencia al índice.

# Vamos a jugar un poco e imprimir un color al azar
from random import randrange
índice_aleatorio = randrange(0, len(colores))
print('=== Imprimiendo un color al azar ===')
print(colores[índice_aleatorio])

Resultado:

=== Imprimiendo un color al azar === azul

En el ejemplo anterior usamos la función len(), esto obtiene la longitud de un elemento iterable y devuelve un valor int. Hay muchos más métodos que podemos aplicar a las listas, pero por ahora nos enfocaremos en los más comunes. Si quieres aprender más sobre los métodos disponibles, puedes consultar la documentación para la clase de lista en Python o usar la función dir() para ver qué métodos están disponibles para ti.

# Vamos a ver los métodos de la clase lista
print('=== Métodos de la lista ===')
print(dir(colores))

Resultado:

=== Métodos de la lista === [‘add’, ‘class’, ‘contains’, ‘delattr’, ‘delitem’, ‘dir’, ‘doc’, ‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘getitem’, ‘gt’, ‘hash’, ‘iadd’, ‘imul’, ‘init’, ‘init_subclass’, ‘iter’, ‘le’, ‘len’, ‘lt’, ‘mul’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘reversed’, ‘rmul’, ‘setattr’, ‘setitem’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘append’, ‘clear’, ‘copy’, ‘count’, ‘extend’, ‘index’, ‘insert’, ‘pop’, ‘remove’, ‘reverse’, ‘sort’]

Como se mencionó anteriormente, podemos agregar diferentes tipos de datos a una lista usando el método append(), esto agregará los datos al final de la lista.

# Definir una lista mixta
lista_mixta = [1, 'dos', 3.0, 'cuatro', 5, 'seis', 7.0, 'ocho', 9, ['diez', 11, 12.0]]
 
# Agregar un nuevo elemento al final de la lista
lista_mixta.append('trece')
print('=== Imprimiendo la lista mixta después de agregar un nuevo elemento ===')
print(lista_mixta)

Resultado:

=== Imprimiendo la lista mixta después de agregar un nuevo elemento === [1, ‘dos’, 3.0, ‘cuatro’, 5, ‘seis’, 7.0, ‘ocho’, 9, [‘diez’, 11, 12.0], ‘trece’]

Y, como podemos ver en la salida de la función dir(), también podemos ordenar la lista usando el método sort(), invertir el orden de la lista usando el método reverse(), y eliminar elementos de la lista usando el método remove().

# Vamos a ordenar nuestra lista de colores
colores.sort()
print('=== Imprimiendo la lista de colores ordenada ===')
print(colores)
 
# Pero luego podemos invertirla
colores.reverse()
print('=== Imprimiendo la lista de colores invertida ===')
print(colores)
 
# Y podemos eliminar el último elemento
colores.pop()
print('=== Imprimiendo la lista de colores después de eliminar el último elemento ===')
print(colores)

Resultado:

=== Imprimiendo la lista de colores ordenada === [‘negro’, ‘azul’, ‘verde’, ‘naranja’, ‘morado’, ‘rojo’, ‘amarillo’] === Imprimiendo la lista de colores invertida === [‘amarillo’, ‘rojo’, ‘morado’, ‘naranja’, ‘verde’, ‘azul’, ‘negro’] === Imprimiendo la lista de colores después de eliminar el último elemento === [‘amarillo’, ‘rojo’, ‘morado’, ‘naranja’, ‘verde’, ‘azul’]

Similar a las listas, los diccionarios también son colecciones ordenadas de datos, pero a diferencia de las listas, los datos en un diccionario se acceden por clave, que es un identificador único para cada pieza de datos, y normalmente hacen referencia a un solo elemento en una colección. Esto puede representar una fila en una base de datos o una entrada en un conjunto de datos. Esto significa que si necesitas definir una lista de objetos, técnicamente tendrás una lista de diccionarios (que a su vez pueden contener otras listas).

# Vamos a definir un diccionario que representa un horario, con el día de la semana como clave y la actividad como valor.
horario = {
    'Lunes': 'Ir al gimnasio',
    'Martes': 'Hacer algo de programación',
    'Miércoles': 'Ir al gimnasio',
    'Jueves': 'Hacer algo de programación',
    'Viernes': 'Ir al gimnasio',
    'Sábado': 'Hacer algo de programación',
    'Domingo': 'Ir al gimnasio'
}
 
print('=== Imprimiendo el horario ===')
print(horario)

Resultado:

=== Imprimiendo el horario === {‘Lunes’: ‘Ir al gimnasio’, ‘Martes’: ‘Hacer algo de programación’, ‘Miércoles’: ‘Ir al gimnasio’, ‘Jueves’: ‘Hacer algo de programación’, ‘Viernes’: ‘Ir al gimnasio’, ‘Sábado’: ‘Hacer algo de programación’, ‘Domingo’: ‘Ir al gimnasio’}

Como se muestra en el código anterior, un diccionario se utiliza típicamente para representar un conjunto de datos relacionados con un solo elemento, por ejemplo, un perfil de usuario o una lista de elementos relacionados con un solo objeto. Pero ¿qué sucede si queremos definir varios objetos relacionados entre sí, por ejemplo, una lista de usuarios o una lista de elementos relacionados con un solo usuario? Podemos definir una lista de diccionarios, donde cada diccionario contiene datos relacionados con un solo objeto, pudiendo acceder a un solo diccionario por el índice de la lista y luego acceder a los datos en el diccionario usando la clave.

# Definiremos una lista de horarios para representar a varios usuarios
horarios = [
    {
        'Lunes': 'comprimir',
        'Martes': 'programar',
        'Miércoles': 'introducir',
        'Jueves': 'parsear',
        'Viernes': 'conectar',
        'Sábado': 'hackear',
        'Domingo': 'calcular'
    },
    {
        'Lunes': 'copiar',
        'Martes': 'navegar',
        'Miércoles': 'eludir',
        'Jueves
 
': 'sintetizar',
        'Viernes': 'sintetizar',
        'Sábado': 'navegar',
        'Domingo': 'sintetizar'
    },
    {
        'Lunes': 'sintetizar',
        'Martes': 'generar',
        'Miércoles': 'transmitir',
        'Jueves': 'copiar',
        'Viernes': 'hackear',
        'Sábado': 'navegar',
        'Domingo': 'programar'
    }
]
 
# Luego podemos iterar sobre la lista de horarios e imprimir el horario para cada usuario
print('=== Iterando sobre la lista de horarios ===')
for índice, horario in enumerate(horarios):
    print(f"""
    Horario para el usuario {índice}:
    {horario}
    {'-'*50}
        """)

Resultado:

=== Iterando sobre la lista de horarios ===

Horario para el usuario 0: {‘Lunes’: ‘comprimir’, ‘Martes’: ‘programar’, ‘Miércoles’: ‘introducir’, ‘Jueves’: ‘parsear’, ‘Viernes’: ‘conectar’, ‘Sábado’: ‘hackear’, ‘Domingo’: ‘calcular’}

Horario para el usuario 1: {‘Lunes’: ‘copiar’, ‘Martes’: ‘navegar’, ‘Miércoles’: ‘eludir’, ‘Jueves’: ‘sintetizar’, ‘Viernes’: ‘sintetizar’, ‘Sábado’: ‘navegar’, ‘Domingo’: ‘sintetizar’}

Horario para el usuario 2: {‘Lunes’: ‘sintetizar’, ‘Martes’: ‘generar’, ‘Miércoles’: ‘transmitir’, ‘Jueves’: ‘copiar’, ‘Viernes’: ‘hackear’, ‘Sábado’: ‘navegar’, ‘Domingo’: ‘programar’}

Eso es genial, ¿verdad? Pero ¿qué pasa si queremos un dato específico de un diccionario? Podemos especificar la clave que queremos acceder usando el operador [], y se devolverá el valor de la clave. Para hacer esto, podemos iterar sobre la lista o definir un índice para el elemento que queremos acceder, por ejemplo, el perfil de usuario del primer usuario en la lista.

# Obtener el horario para el primer usuario para el miércoles
print('=== Obteniendo el horario para el primer usuario para el miércoles ===')
print(horarios[0]['Miércoles'])
 
# Obtener el horario para el segundo usuario para el jueves
print('=== Obteniendo el horario para el segundo usuario para el jueves ===')
print(horarios[1]['Jueves'])

Resultado:

=== Obteniendo el horario para el primer usuario para el miércoles === introducir === Obteniendo el horario para el segundo usuario para el jueves === sintetizar

Recuerda, cada elemento en Python tiene una lista de métodos disponibles, podemos usar la función dir() para ver qué métodos están disponibles para nosotros.

# Imprimir los nombres de los métodos de la clase diccionario
print('=== Métodos del diccionario ===')
print(dir(horario))

Resultado:

=== Métodos del diccionario === [‘class’, ‘contains’, ‘delattr’, ‘delitem’, ‘dir’, ‘doc’, ‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘getitem’, ‘gt’, ‘hash’, ‘init’, ‘init_subclass’, ‘iter’, ‘le’, ‘len’, ‘lt’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘reversed’, ‘setattr’, ‘setitem’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘clear’, ‘copy’, ‘fromkeys’, ‘get’, ‘items’, ‘keys’, ‘pop’, ‘popitem’, ‘setdefault’, ‘update’, ‘values’]

# Ahora vamos a jugar un poco, iteraremos sobre la lista e imprimiremos la actividad para cada día de la semana
print('=== Iterando sobre la lista de horarios ===')
for índice, horario in enumerate(horarios):
    print(f"""
    Horario para el usuario {índice}:
    Lunes: {horario['Lunes']}
    Martes: {horario['Martes']}
    Miércoles: {horario['Miércoles']}
    Jueves: {horario['Jueves']}
    Viernes: {horario['Viernes']}
    Sábado: {horario['Sábado']}
    Domingo: {horario['Domingo']}
    {'-'*50}
    """)

Resultado:

=== Iterando sobre la lista de horarios ===

Horario para el usuario 0: Lunes: comprimir Martes: programar Miércoles: introducir Jueves: parsear Viernes: conectar Sábado: hackear Domingo: calcular

Horario para el usuario 1: Lunes: copiar Martes: navegar Miércoles: eludir Jueves: sintetizar Viernes: sintetizar Sábado: navegar Domingo: sintetizar

Horario para el usuario 2: Lunes: sintetizar Martes: generar Miércoles: transmitir Jueves: copiar Viernes: hackear Sábado: navegar Domingo: programar



Quieres apoyarme para seguir creando contenido? Puedes invitarme un café (o una cerveza) en mi página de Ko-Fi, es totalmente voluntario y tu ayuda me serviría de mucho para seguir haciendo lo que amo.