Diccionarios#

Descripción de la imagen

Un diccionario es una colección no ordenada de pares clave: valor. Las claves son únicas e inmutables, mientras que los valores pueden ser de cualquier tipo y pueden ser modificados. Este tipo de datos es útil para almacenar relaciones entre pares de datos.

Los diccionarios están encerrados en llaves { }, y se usan dos puntos : para separar las claves y los valores.

Creación de un diccionario#

Los diccionarios en Python se definen utilizando llaves {} y los pares clave-valor se separan por dos puntos :. Por ejemplo, la sintaxis sería así:

mi_diccionario = {
    "clave1": valor1,
    "clave2": valor2,
    "clave3": valor3
}

Donde clave1, clave2 y clave3 son las claves que se utilizarán para acceder a los valores correspondientes.

Por ejemplo, asi.

Note

Características de los diccionarios

  • Claves únicas: Cada clave en un diccionario es única, lo que significa que no puede haber claves duplicadas.

  • Mutabilidad de valores: Los valores de un diccionario pueden ser modificados después de la creación.

  • Desordenados: Aunque los diccionarios mantienen el orden de inserción a partir de Python 3.7, no se debe confiar en el orden.

pais_capital = {'Alemania': 'Berlín',
                 'Canada': 'Otawa',
                 'Reino Unido': 'Londres'}
# Para llamar al valor en una diccionario debe usar la siguiente estructura diccionario["clave"]
print(pais_capital['Reino Unido'])
Londres

Métodos de manipulación de diccionarios#

Como ya se ha comentado, los diccionarios son mutables. es decir, sus valores se pueden modificar, eliminar o añadir. Vamos a ver algún método:

Empezamos creando un diccionario inicial (pais_poblacion) en el que las claves serán nombres de países y los valores serán sus poblaciones.

# Crear un diccionario de países y sus poblaciones
paisPoblacion = {
    'China': 1444216107,
    'India': 1393409038,
    'Estados Unidos': 331002651,
    'Indonesia': 273523615,
    'Pakistán': 225199937
}
  1. keys(): Devuelve una nueva vista de las claves del diccionario.

claves = paisPoblacion.keys()
print("Claves del diccionario (países):", claves)
Claves del diccionario (países): dict_keys(['China', 'India', 'Estados Unidos', 'Indonesia', 'Pakistán'])
  1. values(): Devuelve una nueva vista de los valores del diccionario.

valores =paisPoblacion.values()
print("Valores del diccionario (poblaciones):", valores) 
Valores del diccionario (poblaciones): dict_values([1444216107, 1393409038, 331002651, 273523615, 225199937])
  1. items(): Devuelve una nueva vista de los elementos del diccionario (pares clave: valor).

elementos = paisPoblacion.items()
print("Elementos del diccionario (país, población):", elementos)  
Elementos del diccionario (país, población): dict_items([('China', 1444216107), ('India', 1393409038), ('Estados Unidos', 331002651), ('Indonesia', 273523615), ('Pakistán', 225199937)])
  1. get(clave, por_defecto): Devuelve el valor para clave si la clave está en el diccionario, de lo contrario devuelve por_defecto.

# Obtener una clave que existe
poblacion_india = paisPoblacion.get('India', 'No disponible')
print("Población de India:", poblacion_india) 
Población de India: 1393409038
# Obtener una clave que no existe
poblacion_brasil = paisPoblacion.get('Brasil', 'No disponible')
print("Población de Brasil:", poblacion_brasil)
Población de Brasil: No disponible
  1. update(clave: valor_actualizar): Actualiza el diccionario con los pares clave/valor entre paréntesis, sobrescribiendo las claves existentes o actualizándolas si ya existen.

paisPoblacion.update({'Tanzania': 67438110, 'Pakistán': 230000000}) 
# Agrega Tanzania y actualiza la población de Pakistán
print("Diccionario después de update:", paisPoblacion)  
Diccionario después de update: {'China': 1444216107, 'India': 1393409038, 'Estados Unidos': 331002651, 'Indonesia': 273523615, 'Pakistán': 230000000, 'Tanzania': 67438110}
  1. pop(clave): Elimina y devuelve el valor para clave si la clave está en el diccionario

poblacion_china = paisPoblacion.pop('China')
print("Diccionario después de pop:", paisPoblacion) 
print("Población de China eliminada:", poblacion_china)  # Salida: 1444216107
Diccionario después de pop: {'India': 1393409038, 'Estados Unidos': 331002651, 'Indonesia': 273523615, 'Pakistán': 230000000, 'Tanzania': 67438110}
Población de China eliminada: 1444216107

Como evitar la confusion con los conjuntos#

Tanto los diccionarios como los conjuntos se declaran usando corchetes { }, por lo que en el caso que declares un diccionario o conjunto vacio luego puedes generar una confusion. En tal caso, puedes declarar los diccionarios y conjuntos de modo explicito de esta manera

miConjunto = set()
miDiccionario = dict()

Apéndice A: Tabla comparativa#

Característica

Listas

Diccionarios

Conjuntos

Tuplas

Orden

Ordenado

No ordenado

No ordenado

Ordenado

Tipo de dato

Secuencia

Mapeo

Conjunto

Secuencia

Sintaxis

[ ]

{ clave : valor }

{ elemento1, elemento2 }

( )

Mutabilidad

Mutable

Mutable (claves inmutables)

Mutable

Inmutable

Duplicados

Permite

No permite (claves)

No permite

Permite

Búsqueda por índice

No (búsqueda por clave)

No

Búsqueda por valor

Sí (búsqueda de valores)

Métodos principales

append, extend, remove

keys, values, items, get, update

add, remove, discard, union, intersection

count, index

Uso común

Almacenar secuencias

Almacenar pares clave-valor

Almacenar colecciones sin duplicados

Almacenar registros inmutables

Caso práctico: Eligiendo una estructura de datos#

Suponga que usted fue elegido como asesor del código de una empresa y se encuentra con que la empresa almacena la información de sus productos de la siguiente manera

productos = ["Armarios", "Mesas", "Camas"]
stock = [100, 50, 75]
precios = [990, 590, 490]

¿Cuál sería una mejor manera de almacenar datos? ¿por qué eligió esa manera?

Solución#

Se ha optado por crear un diccionario anidado, o sea, un diccionario dentro de otro

# Diccionario para almacenar datos de productos
muebles_info = {
    "Armarios": {"stock": 100, "precio": 990},
    "Mesas": {"stock": 50, "precio": 590},
    "Camas": {"stock": 75, "precio": 490}
}

Esto es mejor por las siguientes razones:

  • Integridad de datos: si eliminas un ítem en el diccionario, también eliminarás el resto de los datos relacionados con ese producto.

  • Consistencia: todo está “adjunto” al mismo producto, así que si cambias un índice, todo también se moverá.

  • Te ves obligado a agregar todos los datos relacionados de un producto.

  • Sin duplicados: Los diccionarios tienen claves no duplicadas, por lo que puedes estar seguro de que solo hay un registro por producto.

  • Legibilidad: Es más legible. base["Producto B"]["stock"] es mejor que producto[1] stock[1].