PyQuiz 47 - in busca en claves en Python | Quiz interactivo

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 datos

Paso a paso

  1. datos = {'a': 1, 'b': 2} — Diccionario con claves 'a' y 'b', y valores 1 y 2.
  2. 1 in datos — El operador in busca si 1 está entre las claves del diccionario.
  3. Las claves son 'a' y 'b'. El entero 1 no es ninguna de ellas.
  4. 1 in datos devuelve False.
  5. print(1 in datos) — Se imprime False.

📥 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())   # True

Prueba 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.

Ver el curso completo →

37+ horas · 734 actividades · Proyecto real · Acceso de por vida · 14 días de garantía

Compartir