PyQuiz 47 – in busca en claves en Python

El reto
datos = {'a': 1, 'b': 2}
print(1 in datos)¿Cuál es el resultado?
- a) True
- b) False
- c) Error
Piensa tu respuesta antes de seguir leyendo…
Concepto: in busca en claves
El operador in aplicado a un diccionario busca en las claves, no en los valores. Esto es importante y a menudo sorprende a quienes vienen de otros lenguajes.
Para buscar en valores, hay que usar explícitamente valor in diccionario.values(). Para buscar en pares clave-valor, se usa (clave, valor) in diccionario.items(). La búsqueda con in en las claves es muy eficiente (O(1) de media) porque los diccionarios usan una tabla hash internamente.
datos = {'a': 1, 'b': 2}
print('a' in datos) # True — 'a' es clave
print(1 in datos) # False — 1 NO es clave
print(1 in datos.values()) # True — 1 SÍ es valor
print('a' in datos.keys()) # True — explícito, igual que 'a' in datosPaso a paso
datos = {'a': 1, 'b': 2}— Diccionario con claves'a'y'b', y valores1y2.1 in datos— El operadorinbusca si1está entre las claves del diccionario.- Las claves son
'a'y'b'. El entero1no es ninguna de ellas. 1 in datosdevuelveFalse.print(1 in datos)— Se imprimeFalse.
📥 Llévate el cheatsheet de Python (gratis)
PDF de 6 páginas con lo esencial: tipos, condicionales, bucles, estructuras de datos, funciones y los errores que más vas a cometer. Para tener al lado mientras programas.
Sin spam. Te apuntas a la lista, descargas el cheatsheet y recibes contenido de Python cada semana.
Solución
Respuesta correcta: B) False
'in' en diccionarios busca en las CLAVES, no en los valores. 1 no es una clave.
Sabías que…
La búsqueda con in también funciona de forma diferente en listas vs. diccionarios en cuanto a rendimiento:
import time
# En una lista: búsqueda lineal O(n)
lista = list(range(1_000_000))
999_999 in lista # lento con listas grandes
# En un diccionario: búsqueda hash O(1)
diccionario = {i: True for i in range(1_000_000)}
999_999 in diccionario # instantáneo independientemente del tamaño
# En sets: también O(1)
conjunto = set(range(1_000_000))
999_999 in conjunto # instantáneo
# Para buscar en valores (no recomendado para datos grandes):
print(2 in datos.values()) # TruePrueba tú mismo
Dado info = {1: 'uno', 2: 'dos', 'tres': 3}, ¿qué devuelven 'uno' in info, 1 in info y 3 in info.values()?
Más PyQuizzes en elpythonista.com/pyquizzes
Tutorial relacionado: Diccionarios en Python
¿Quieres aprender Python en orden, no a saltos?
Esto que has leído es solo una pieza. En El Pythonista lo verás todo encadenado: 11 módulos, 37+ horas de vídeo, 734 actividades y un proyecto real (MovieTracker) que crece contigo desde la primera variable hasta el deploy a producción.
37+ horas · 734 actividades · Proyecto real · Acceso de por vida · 14 días de garantía
