Diccionarios en Python
Guía completa de referencia
d = {"a": 1}
d["b"] = 2
>>> {'a': 1, 'b': 2}
Preparado por Romario
Universidad Continental — Arequipa
Agosto 2026
Diccionarios en Python Ing. de Sistemas
Contents
1 Introducción 2
2 Creación de diccionarios 2
3 Acceso a valores 2
4 Modificar y eliminar 2
5 Recorrer un diccionario 3
6 Combinar y actualizar diccionarios 3
7 Comprehensions de diccionario 3
8 Métodos completos 4
9 Copias: superficial vs profunda 4
10 Módulos relacionados 4
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
[Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
11 Tabla resumen de complejidad 5
12 Cuándo NO usar diccionarios 6
13 Cheat sheet final 6
1
Diccionarios en Python Ing. de Sistemas
1 Introducción
Los diccionarios (dict) son estructuras de datos que almacenan pares clave-valor. Son
mutables, y desde Python 3.7 mantienen el orden de inserción de forma garantizada.
Internamente se implementan como tablas hash, lo que hace que la búsqueda por clave
sea muy eficiente.
1 persona = {"nombre": "Ana", "edad": 25, "ciudad": "Arequipa"}
2 print(type(persona)) # <class 'dict'>
Nota: Las claves de un diccionario deben ser hashables (inmutables): strings,
números, tuplas. No pueden ser listas, sets, ni otros diccionarios.
2 Creación de diccionarios
1 vacio = {}
2 vacio2 = dict()
3 d = {"a": 1, "b": 2}
4 d2 = dict(a=1, b=2)
5 d3 = dict(zip(["a", "b", "c"], [1, 2, 3]))
6 d4 = [Link](["a", "b", "c"], 0) # {'a':0,'b':0,'c':0}
7 por_comprension = {k: v for k, v in [("a", 1), ("b", 2)]}
8 anidado = {"usuario": {"nombre": "Ana", "activo": True}}
[Link](claves, valor) es la forma más rápida de crear un diccionario con el
mismo valor inicial para todas las claves — muy útil para contadores o flags.
3 Acceso a valores
1 d = {"a": 1, "b": 2}
2
3 d["a"] # 1
4 d["z"] # KeyError! la clave no existe
5 [Link]("a") # 1
6 [Link]("z") # None (no lanza error)
7 [Link]("z", 0) # 0 (valor por defecto)
8 "a" in d # True (verifica si la clave existe)
9 "a" in [Link]() # False (values no busca aqui)
10 1 in [Link]() # True
Cuidado: d["clave"] lanza KeyError si la clave no existe. Usa [Link]("clave") o
[Link]("clave", default) cuando no estés seguro de que la clave exista.
4 Modificar y eliminar
1 d = {"a": 1, "b": 2}
2
3 d["c"] = 3 # agrega nueva clave
2
Diccionarios en Python Ing. de Sistemas
4 d["a"] = 99 # actualiza clave existente
5 [Link]("d", 10) # crea "d"=10 solo si no existe
6 [Link]("a", 100) # no hace nada, "a" ya existe
7
8 del d["a"] # elimina la clave "a"
9 [Link]("b") # elimina y devuelve el valor
10 [Link]("z", None) # con default, evita KeyError
11 [Link]() # elimina el ultimo par insertado
12 [Link]() # vacia el diccionario
5 Recorrer un diccionario
1 d = {"a": 1, "b": 2, "c": 3}
2
3 for clave in d:
4 print(clave)
5
6 for clave in [Link]():
7 print(clave)
8
9 for valor in [Link]():
10 print(valor)
11
12 for clave, valor in [Link]():
13 print(clave, valor)
[Link](), [Link]() y [Link]() devuelven vistas dinámicas, no listas nuevas. Si
el diccionario cambia, la vista refleja el cambio automáticamente.
6 Combinar y actualizar diccionarios
1 d1 = {"a": 1, "b": 2}
2 d2 = {"b": 20, "c": 3}
3
4 [Link](d2) # d1 = {'a':1,'b':20,'c':3} (in−place)
5 [Link](x=5, y=6) # tambien acepta keywords
6
7 combinado = d1 | d2 # merge, Python 3.9+ (no muta d1 ni d2)
8 d1 |= d2 # merge in−place, Python 3.9+
9 combinado2 = {∗∗d1, ∗∗d2} # merge por unpacking (funciona en 3.5+)
7 Comprehensions de diccionario
1 cuadrados = {x: x∗∗2 for x in range(5)}
2 # {0:0, 1:1, 2:4, 3:9, 4:16}
3
4 filtrado = {k: v for k, v in [Link]() if v > 1}
5
6 invertido = {v: k for k, v in [Link]()} # intercambia clave <−> valor
7
8 mayusculas = {[Link](): v for k, v in [Link]()}
3
Diccionarios en Python Ing. de Sistemas
Al invertir un diccionario ({v: k for k, v in [Link]()}), si hay valores duplicados
se pierden datos: solo sobrevive el último par procesado para cada valor repetido.
8 Métodos completos
Método Descripción
get(k, default) Devuelve el valor de k o default si no existe
setdefault(k, default) Devuelve el valor de k, creándolo con default si
no existe
update(otro) Combina otro diccionario o iterable de pares in-
place
pop(k, default) Elimina k y devuelve su valor
popitem() Elimina y devuelve el último par insertado
clear() Vacía el diccionario
copy() Copia superficial (shallow)
keys() Vista de las claves
values() Vista de los valores
items() Vista de los pares (clave, valor)
fromkeys(iter, v) Crea un diccionario nuevo desde un iterable de
claves
9 Copias: superficial vs profunda
1 import copy
2
3 original = {"datos": [1, 2, 3]}
4
5 superficial = [Link]() # o dict(original)
6 profunda = [Link](original)
7
8 superficial["datos"].append(4)
9 print(original) # {'datos': [1,2,3,4]} <− se modifico!
10
11 profunda["datos"].append(5)
12 print(original) # {'datos': [1,2,3,4]} <− no se modifico
10 Módulos relacionados
10.1 [Link]
1 from collections import defaultdict
2
3 dd = defaultdict(list)
4 dd["frutas"].append("manzana") # no lanza KeyError, crea la lista sola
5 dd["frutas"].append("pera")
6 print(dd) # {'frutas': ['manzana', 'pera']}
7
8 dd_num = defaultdict(int)
9 dd_num["contador"] += 1 # arranca en 0 automaticamente
4
Diccionarios en Python Ing. de Sistemas
10.2 [Link]
1 from collections import Counter
2
3 c = Counter("banana")
4 # Counter({'a': 3, 'n': 2, 'b': 1})
5
6 c.most_common(2) # [('a', 3), ('n', 2)]
7 c["a"] # 3
8 [Link]("ana") # suma mas ocurrencias
9 c + Counter("ban") # suma dos Counters
10.3 [Link]
1 from collections import OrderedDict
2
3 od = OrderedDict()
4 od["z"] = 1
5 od["a"] = 2
6 od.move_to_end("z") # mueve "z" al final
7 # Desde Python 3.7 los dict normales ya mantienen el orden,
8 # pero OrderedDict ofrece metodos extra como move_to_end()
10.4 [Link]
1 from collections import ChainMap
2
3 defaults = {"color": "azul", "tamano": "M"}
4 usuario = {"color": "rojo"}
5
6 config = ChainMap(usuario, defaults)
7 config["color"] # 'rojo' (busca primero en usuario)
8 config["tamano"] # 'M' (cae al segundo dict)
ChainMap combina varios diccionarios en una sola vista sin copiar los datos — ideal
para manejar configuraciones con capas (defaults + overrides de usuario).
11 Tabla resumen de complejidad
Operación Complejidad
d[k] (lectura) O(1) promedio
d[k] = v (escritura) O(1) promedio
k in d O(1) promedio
del d[k] O(1) promedio
len(d) O(1)
[Link]() O(n)
recorrer todo el dict O(n)
5
Diccionarios en Python Ing. de Sistemas
El ”O(1) promedio” asume buena distribución de hashes. En el peor caso teórico
(muchas colisiones) puede degradar a O(n), pero en la práctica esto casi nunca ocurre
con las claves típicas (strings, números).
12 Cuándo NO usar diccionarios
• Si necesitas mantener elementos ordenados por valor constantemente → consid-
era una lista de tuplas ordenada o heapq
• Si solo necesitas verificar pertenencia sin asociar un valor → set
• Si las claves son enteros consecutivos desde 0 → una list suele ser más simple y
rápida
• Si necesitas inmutabilidad total → [Link] (vista de solo lectura de
un dict)
• Si necesitas structs con atributos fijos y tipados → dataclass o NamedTuple
13 Cheat sheet final
# Lo que se usa el 90% del tiempo:
[Link](k, default)
[Link](k, default)
[Link](otro)
[Link](k, default)
[Link]() # recorrer clave y valor
{k: v for k, v in [Link]() if cond} # comprehension
k in d # pertenencia
defaultdict(list), Counter(iterable)
Documento generado para uso académico — Ing. de Sistemas