Diccionarios con Python

Podríamos definir los diccionarios en Python como colecciones de pares ordenados (ordenados desde la versión de Python 3.7). La indexación de los diccionarios se realiza mediante claves.

Algunas características de los diccionarios son las siguientes:

  • Son ordenados desde la versión de Python 3.7.
  • Admiten elementos de diferentes tipos.
  • Son mutables.
  • Requieren claves únicas.
  • No admiten duplicado.
  • Admite cualquier valores de cualquier tipo de dato inmutable.

Los diccionarios en Python

Los diccionarios en Python son una estructura muy utilizada. Trabajar con ellos resulta muy útil en la creación de nuestros programas.

Veamos cómo crear diccionarios mediante algunos ejemplos:

mi_diccionario = {'clave': 'valor'}
print(type(mi_diccionario))

# <class 'dict'>
tu_diccionario = {1: 'valor'}
print(type(tu_diccionario))

# <class 'dict'>

En los dos diccionarios anteriores se ha creado una clave y un valor.

  • Para mi_diccionario mi_diccionario = {‘clave’: ‘valor’}
    • La clave → ‘clave’ dos puntos : y el valor → ‘valor’
  • Para tu_diccionario tu_diccionario = {1: ‘valor’}
    • La clave → 1 dos puntos : y el valor → ‘valor’

Veamos un ejemplo de diccionario algo más elaborado:

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
    'bits': 16,
    'lanzamiento': 1988
}
print(un_diccionario)

# {'marca': 'SEGA', 'modelo': 'MegaDrive', 'bits': 16, 'lanzamiento': 1988}

También podemos crear un diccionario especificando las claves necesarias con un valor único para todas.

otro_diccionario = dict.fromkeys('12345', 0)

print(type(otro_diccionario))
# <class 'dict'>

print(otro_diccionario)
# {'1': 0, '2': 0, '3': 0, '4': 0, '5': 0}

Constructor dict() en Python

Es posible crear un diccionario mediante el constructor dict() para Python.

un_diccionario = dict(
    marca='SEGA',
    modelo='MegaDrive',
    bits=16,
    lanzamiento=1988
)

print(type(un_diccionario))
# <class 'dict'>

Podemos ver el tamaño de nuestro diccionario mediante la función len().

print(len(un_diccionario))
# 4

Accediendo a elementos de un diccionario

Podemos acceder a los elementos de un diccionario mediante su clave entre corchetes. Si la clave no existe, nos lanzará un error.

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
    'bits': 16,
    'lanzamiento': 1988
}

print(un_diccionario['modelo'])
# MegaDrive

print(un_diccionario['bits'])
# 16

print(un_diccionario['vendidos'])
# KeyError: 'vendidos'

El método get() es otra forma para acceder al valor de alguna de las claves de nuestro diccionario. Este método es ideal para evitar errores al consultar claves que no existan en nuestro diccionario.

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
    'bits': 16,
    'lanzamiento': 1988
}
variable = un_diccionario.get('lanzamiento')
print(variable)

# 1988

Consultado el valor de una clave mediante get() podemos especificar un valor para mostrar en el caso de que la clave no exista. Si la clave no existe y no especificamos un valor, con get() no va a mostrarnos error y directamente nos devolverá None.

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
    'bits': 16,
    'lanzamiento': 1988
}

variable = un_diccionario.get('vendidos', 'Este dato no está disponible')
print(variable)
# Este dato no está disponible

variable = un_diccionario.get('vendidos')
print(variable)
# None

Gracias al método keys() de Python, podemos acceder a un listado con todas las claves de nuestro diccionario.

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
    'bits': 16,
    'lanzamiento': 1988
}
print(un_diccionario.keys())

# dict_keys(['marca', 'modelo', 'bits', 'lanzamiento'])

Con el método values() podemos acceder a todos los valores de nuestro diccionario.

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
    'bits': 16,
    'lanzamiento': 1988
}
print(un_diccionario.values())

# dict_values(['SEGA', 'MegaDrive', 16, 1988])

El método items() va a devolvernos cada elemento de un diccionario, incluyendo clave y valor.

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
    'bits': 16,
    'lanzamiento': 1988
}
print(un_diccionario.items())

# dict_items([('marca', 'SEGA'), ('modelo', 'MegaDrive'), ('bits', 16), ('lanzamiento', 1988)])

Modificando un diccionario con Python

Podemos modificar un diccionario en Python agregando un elemento nuevo, eliminando o modificando el valor de uno ya existente.

Añadiendo y actualizando elementos a un diccionario

Para añadir un elemento a un diccionario existente, escribiremos la nueva clave entre corchetes y le asignaremos un valor.

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
    'bits': 16,
    'lanzamiento': 1988
}
un_diccionario['vendidos'] = 30.75
print(un_diccionario.items())

# dict_items([('marca', 'SEGA'), ('modelo', 'MegaDrive'), ('bits', 16), ('lanzamiento', 1988), ('vendidos', 30.75)])

Ahora vamos a realizar la misma actualización, pero utilizando el método update().

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
    'bits': 16,
    'lanzamiento': 1988
}
un_diccionario.update({'vendidos': '30.75'})
print(un_diccionario)

# {'marca': 'SEGA', 'modelo': 'MegaDrive', 'bits': 16, 'lanzamiento': 1988, 'vendidos': '30.75'}

Si quisiéramos actualizar el valor del elemento que acabamos de introducir o de cualquier otro, lo haríamos haciendo referencia a la clave del elemento y asignándole el nuevo valor.

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
    'bits': 16,
    'lanzamiento': 1988,
    'vendidos': 30.75
}
un_diccionario['vendidos'] = '30.75 millones'
print(un_diccionario.items())

# dict_items([('marca', 'SEGA'), ('modelo', 'MegaDrive'), ('bits', 16), ('lanzamiento', 1988), ('vendidos', '30.75 millones')])

También podríamos actualizar un valor determinado utilizando el método update().

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
    'bits': 16,
    'lanzamiento': 1988,
    'vendidos': '30.75 millones'
}
un_diccionario.update({'vendidos': 30.75})
print(un_diccionario.items())

# dict_items([('marca', 'SEGA'), ('modelo', 'MegaDrive'), ('bits', 16), ('lanzamiento', 1988), ('vendidos', 30.75)])

Eliminando elementos a un diccionario

Veamos ahora ejemplos para eliminar algunos elementos de nuestro diccionario. La primera forma será mediante el método pop(), en el que especificaremos la clave entre paréntesis. Si introducimos una clave que no existe, va a devolvernos un error.

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
    'bits': 16,
    'lanzamiento': 1988,
    'vendidos': '30.75 millones'
}
un_diccionario.pop('bits')
print(un_diccionario)

# {'marca': 'SEGA', 'modelo': 'MegaDrive', 'lanzamiento': 1988, 'vendidos': '30.75 millones'}

La segunda forma es haciendo uso de la palabra clave del e indicando la clave entre corchetes.

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
    'bits': 16,
    'lanzamiento': 1988,
    'vendidos': '30.75 millones'
}
del un_diccionario['lanzamiento']
print(un_diccionario)

# {'marca': 'SEGA', 'modelo': 'MegaDrive', 'bits': 16, 'vendidos': '30.75 millones'}

Con del también podemos eliminar el diccionario completamente de una sola vez si no especificamos ninguna clave entre corchetes.

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
}
del un_diccionario
print(un_diccionario)

# NameError: name 'un_diccionario' is not defined.

Vaciar un diccionario

Existe la posibilidad de vaciar el diccionario pero no eliminarlo. Para ello, utilizaremos el método clear().

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
}
un_diccionario.clear()
print(un_diccionario)

# {}

Recorriendo diccionario con Python

Podemos recorrer un diccionario mediante un for y Comprehensions de forma sencilla. Para ello, utilizaremos los mismos métodos que hemos usado para modificar los elementos:

  • keys() para recorrer las claves.
  • values() para recorrer los valores.
  • items() para recorrer claves y valores.

Para estos tres ejemplos siguientes recorriendo diccionarios con Python utilizaremos el siguiente diccionario:

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
    'bits': 16,
    'lanzamiento': 1988,
    'vendidos': '30.75 millones'
}

Recorrer diccionario con for y keys()

for clave in un_diccionario.keys():
    print(f'→ {clave}')

# → marca
# → modelo
# → bits
# → lanzamiento
# → vendidos

Recorrer diccionario con for y values()

for valor in un_diccionario.values():
    print(f'→ {valor}')

# → SEGA
# → MegaDrive
# → 16
# → 1988
# → 30.75 millones

Recorrer diccionario con for e items()

for clave, valor in un_diccionario.items():
    print(f'{clave} → {valor}')

# marca → SEGA
# modelo → MegaDrive
# bits → 16
# lanzamiento → 1988
# vendidos → 30.75 millones

Crear y recorrer un diccionario con Comprehension

Crear y recorrer un diccionario con la estructura for Comprehension puede sernos muy útil si necesitamos realizar operaciones con alguno de los valores de nuestro diccionario.

Para ello, lo primero que haremos será crear un diccionario con las claves del número 1 al 10. El valor para cada clave será un número generado de forma aleatoria entre 1 y 100.

import random

diccionario = {numero: random.randint(1, 100) for numero in range(10)}
print(diccionario)

# {0: 65, 1: 3, 2: 34, 3: 28, 4: 55, 5: 47, 6: 29, 7: 4, 8: 90, 9: 46}

Ahora podemos recorrer el diccionario realizando alguna operación con cada uno de los valores. Los transformaremos de valor tipo int a valores de tipo string  y agregaremos la cadena ‘ref-‘ delante de cada número.

diccionario = {0: 65, 1: 3, 2: 34, 3: 28, 4: 55, 5: 47, 6: 29, 7: 4, 8: 90, 9: 46}
diccionario = {clave: f'ref-{valor}' for clave, valor in diccionario.items()}
print(diccionario)

# {0: 'ref-65', 1: 'ref-3', 2: 'ref-34', 3: 'ref-28', 4: 'ref-55', 5: 'ref-47', 6: 'ref-29', 7: 'ref-4', 8: 'ref-90', 9: 'ref-46'}

Copiar diccionarios con Python

Podemos copiar diccionarios con Python utilizando el método copy() y mediante el constructor dict(). Veamos cómo hacerlo con un par de sencillos ejemplos:

Copiar diccionario mediante copy()

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
    'bits': 16,
    'lanzamiento': 1988,
    'vendidos': '30.75 millones'
}
nuevo_diccionario = un_diccionario.copy()

print(type(nuevo_diccionario))
# <class 'dict'>

print(nuevo_diccionario)
# {'marca': 'SEGA', 'modelo': 'MegaDrive', 'bits': 16, 'lanzamiento': 1988, 'vendidos': '30.75 millones'}

Copiar diccionario mediante dict()

un_diccionario = {
    'marca': 'SEGA',
    'modelo': 'MegaDrive',
    'bits': 16,
    'lanzamiento': 1988,
    'vendidos': '30.75 millones'
}
nuevo_diccionario = dict(un_diccionario)

print(type(nuevo_diccionario))
# <class 'dict'>

print(nuevo_diccionario)
# {'marca': 'SEGA', 'modelo': 'MegaDrive', 'bits': 16, 'lanzamiento': 1988, 'vendidos': '30.75 millones'}

Lista de diccionarios

Una estructura que me gusta mucho es la lista de diccionarios. Vamos a verla con un ejemplo:

lista_consolas = [
    {
        'marca': 'SEGA',
        'modelo': 'MegaDrive',
        'bits': 16,
        'lanzamiento': 1988,
        'vendidos': '30.75 millones'
    },{
        'marca': 'SEGA',
        'modelo': 'Master System',
        'bits': 8,
        'lanzamiento': 1989,
        'vendidos': '10 millones'
    },{
        'marca': 'Nintendo',
        'modelo': 'NES',
        'bits': 8,
        'lanzamiento': 1983,
        'vendidos': '61.91 millones'
    }
]

print(lista_consolas[0])
# {'marca': 'SEGA', 'modelo': 'MegaDrive', 'bits': 16, 'lanzamiento': 1988, 'vendidos': '30.75 millones'}

print(lista_consolas[2])
# {'marca': 'Nintendo', 'modelo': 'NES', 'bits': 8, 'lanzamiento': 1983, 'vendidos': '61.91 millones'}

Ahora vamos a mostrar un listado con la información de las consolas.

for consola in lista_consolas:
    for clave, valor in consola.items():
        print(f'{clave} → {valor}')
    print('▬▬▬▬▬▬▬▬▬')

# marca → SEGA
# modelo → MegaDrive
# bits → 16
# lanzamiento → 1988
# vendidos → 30.75 millones
# ▬▬▬▬▬▬▬▬▬
# marca → SEGA
# modelo → Master System
# bits → 8
# lanzamiento → 1989
# vendidos → 10 millones
# ▬▬▬▬▬▬▬▬▬
# marca → Nintendo
# modelo → NES
# bits → 8
# lanzamiento → 1983
# vendidos → 61.91 millones

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *