- Aprender
- Informática
- Programación
- Introducción a la programación con Python
- Diccionarios y conjuntos en Python
Diccionarios y conjuntos en Python
PrincipianteUnidad 7 de 10 del curso Curso de Introducción a la programación con Python
Lo que aprenderás
- Explica qué es un diccionario, construye uno a partir de pares clave-valor, lee valores por clave sin que el programa se detenga por claves ausentes y añade, modifica y elimina entradas.
- Construye diccionarios a partir de pares clave-valorDescribe un diccionario como una colección que asocia claves únicas a valores, escribe literales de diccionario, construye diccionarios con
dict()y elige claves que Python acepte. - Consulta valores por clave de forma seguraLee un valor con corchetes, comprueba si una clave existe con
iny usaget()para proporcionar un valor predeterminado en lugar de detener el programa por una clave ausente. - Añade, modifica y elimina entradasInserta elementos nuevos, actualiza valores existentes, fusiona dos diccionarios y elimina entradas con
del,pop()y métodos relacionados.
- Construye diccionarios a partir de pares clave-valor
- Visita cada clave, valor o par clave-valor de un diccionario, calcula totales e informes ordenados y crea diccionarios nuevos con bucles y diccionarios por comprensión.
- Recorre claves, valores y pares clave-valor con buclesUsa bucles
forcon un diccionario,.values()y.items(), ordena las claves por nombre o por valor y evita cambiar el tamaño de un diccionario mientras lo recorres. - Construye diccionarios nuevos a partir de datos existentesCrea diccionarios con bucles y diccionarios por comprensión para transformar valores, filtrar elementos, emparejar listas e intercambiar claves y valores.
- Recorre claves, valores y pares clave-valor con bucles
- Usa un diccionario como un conjunto de contadores, reúne elementos en grupos y suma totales por categoría, tareas cotidianas de los diccionarios en programas reales.
- Cuenta las apariciones de cada elementoConstruye una tabla de frecuencias con un diccionario de contadores, cuenta las palabras de un texto, encuentra los elementos más frecuentes y reconoce
Countercomo un atajo. - Agrupa elementos y suma valores por categoríaReúne elementos en listas bajo una clave compartida, suma importes por categoría, calcula medias de grupos y evita que las claves compartan listas por accidente.
- Cuenta las apariciones de cada elemento
- Representa registros como diccionarios dentro de diccionarios o listas, lee y actualiza valores a cualquier profundidad y recorre datos anidados con bucles para resumirlos.
- Almacena registros y accede a ellos en diccionarios anidadosConstruye diccionarios de diccionarios, listas de diccionarios y diccionarios de listas, accede a valores con consultas encadenadas, actualízalos y copia datos anidados de forma segura.
- Recorre datos anidados con bucles y resúmelosUsa bucles, incluidos bucles anidados, para generar informes, filtrar y resumir registros, y trata los registros con campos ausentes o listas vacías.
- Almacena registros y accede a ellos en diccionarios anidados
- Crea conjuntos de valores únicos, comprueba la pertenencia, compara colecciones mediante la unión, la intersección y la diferencia, y elige entre listas, tuplas, diccionarios y conjuntos.
- Crea conjuntos y elimina duplicadosEscribe y modifica conjuntos, explica por qué no contienen duplicados ni tienen orden, comprueba la pertenencia y elimina duplicados de una lista conservando o sin conservar su orden.
- Compara colecciones con operaciones de conjuntosUsa la unión, la intersección, la diferencia y la diferencia simétrica, comprueba subconjuntos, superconjuntos y conjuntos disjuntos, y distingue los operadores que devuelven conjuntos nuevos de los métodos que modifican un conjunto.
- Elige la colección adecuada para una tareaCompara listas, tuplas, diccionarios y conjuntos, elige lo que necesite cada tarea y combínalos, incluidas las operaciones de conjuntos con claves de diccionarios.
- Crea conjuntos y elimina duplicados
Guía de estudio de Diccionarios y conjuntos en Python
1Almacena y consulta datos con diccionarios
Un diccionario conecta cada clave con un valor, lo que permite consultar contactos, inventarios y otros registros por su nombre. Para construirlo y modificarlo, primero hay que saber qué identifica una clave y qué significa su valor. Una consulta segura permite al programa distinguir un registro ausente de un valor existente igual a cero. Añadir, fusionar y eliminar pares modifica esa información almacenada siguiendo reglas predecibles sobre el orden de inserción.
1.1 Construye diccionarios a partir de pares clave-valor
Un diccionario almacena pares: una clave identifica un elemento y su valor contiene la información que quieres. Una lista de contactos es un modelo útil: un nombre lleva a un número de teléfono. Una consulta en un diccionario usa una clave, incluso cuando esa clave es un número.
Escribe los pares
ages = {"Ana": 31, "Ben": 27, "Cara": 35}
print(ages["Ben"])
print(len(ages))
Esto imprime 27 y después 3. Los dos puntos unen cada clave con su valor; las comas separan los pares. len cuenta pares. Tanto {} como dict() crean un diccionario vacío.
Cada clave aparece solo una vez. En {"a": 1, "b": 2, "a": 3}, el valor posterior de "a" sustituye al anterior y deja {'a': 3, 'b': 2}. Dos claves diferentes pueden tener el mismo valor: {"Ana": "blue", "Ben": "blue"} sigue teniendo dos elementos.
Construye a partir de otros datos
Elige la forma que corresponda a los datos de entrada:
colors = dict(red=1, blue=2)
coordinates = dict([("x", 10), ("y", 20)])
labels = dict(zip(["a", "b", "c"], [1, 2, 3]))
La primera forma crea claves de cadena a partir de los nombres de los argumentos. La segunda lee una secuencia de pares de dos elementos. La tercera empareja los elementos correspondientes de dos listas y produce {'a': 1, 'b': 2, 'c': 3}. Las cadenas de la primera forma son 'red' y 'blue', no consultas de variables.
Elige claves válidas
Las claves de diccionario deben ser aptas para hash. Las cadenas y los números sirven, al igual que las tuplas formadas íntegramente por elementos aptos para hash. Las listas, los diccionarios y los conjuntos ordinarios no sirven como claves. Para una ubicación, usa (2, 3), una tupla, en lugar de [2, 3], una lista:
board = {(0, 0): "start", (2, 3): "treasure"}
print(board[(2, 3)])
Esto imprime treasure. Los paréntesis convierten el par de coordenadas en una sola clave. Una tupla que contenga una lista sigue incumpliendo la regla de aptitud para hash. Los valores de diccionario no tienen esa restricción: un valor puede ser una lista, otro diccionario o cualquier otro tipo.
Las claves numéricas iguales hacen referencia a la misma entrada. Como 1, 1.0 y True son iguales al compararlos, {1: "one", 1.0: "float one"} contiene un par, con el valor 'float one'. La cadena "1" es una clave distinta del número 1.
Distingue el orden de la identidad
Desde Python 3.7, los diccionarios conservan el orden de inserción. Las edades anteriores aparecen como Ana, Ben, Cara al imprimirlas o recorrerlas con un bucle. Siguen teniendo claves, no posiciones de lista: ages[0] solicita la clave 0 y lanza KeyError: 0.
Los diccionarios son mutables. Después de backup = ages, ambos nombres hacen referencia al mismo diccionario. Asignar backup["Ana"] = 32 también cambia el valor al que se accede mediante ages. Para copiar el diccionario externo, escribe backup = ages.copy() o backup = dict(ages). Los diccionarios externos independientes pueden seguir compartiendo listas y diccionarios anidados.
Puntos clave
- Cada clave única se asocia a un valor;
len(d)cuenta los pares. - Las claves deben ser aptas para hash; los valores pueden ser de cualquier tipo.
- Las claves iguales comparten una entrada, y las asignaciones posteriores sustituyen su valor.
- El orden de inserción no convierte las claves de diccionario en posiciones.
- La asignación comparte un diccionario;
copy()crea un diccionario externo independiente.
1.2 Consulta valores por clave de forma segura
La consulta debe ajustarse a lo que signifique una clave ausente en tu programa. A veces indica un error. Otras veces es normal, como un producto que aún no se ha contado. Python te ofrece distintas formas de tratar esos casos.
Lee un valor existente
stock = {"apples": 12, "pears": 0, "plums": 7}
print(stock["plums"])
La consulta con corchetes devuelve 7. Las claves deben coincidir exactamente: "Plums" es diferente de "plums". Leer stock["kiwis"] lanza KeyError: 'kiwis' porque esa clave no existe. No proporciona un valor vacío ni un conteo de cero.
Usa esta consulta directa cuando la clave sea obligatoria. Así, un error llama la atención sobre datos incompletos o un fallo de escritura en el lugar donde ocurre.
Comprueba si hay una clave
La expresión key in stock comprueba si una clave existe. "pears" in stock es True, aunque su valor almacenado sea cero. "kiwis" not in stock también es True.
item = "kiwis"
if item in stock:
print(stock[item])
else:
print("No stock record for", item)
Aquí, la clave ausente provoca un mensaje. La consulta solo se realiza en la rama en la que la clave existe.
La comprobación de pertenencia en un diccionario busca claves. 12 in stock es False; para preguntar si algún elemento tiene un valor almacenado de 12, escribe 12 in stock.values(). La colección que coloques después de in determina dónde se busca.
Lee con un valor predeterminado
stock.get("kiwis") devuelve None sin lanzar KeyError. Proporciona un segundo argumento para elegir otro valor predeterminado: stock.get("kiwis", 0) devuelve 0. Ninguna de las llamadas inserta un elemento nuevo. Después de ambas llamadas, el diccionario sigue conteniendo solo manzanas, peras y ciruelas.
| Pregunta que hace el programa | Forma útil |
|---|---|
| ¿Cuál es el valor de esta clave obligatoria? | stock[item] |
| ¿Existe esta clave? | item in stock |
| ¿Cuál es el valor, o una alternativa si no existe? | stock.get(item, 0) |
El valor predeterminado sustituye el resultado de una consulta ausente, no un valor almacenado. stock.get("pears", 99) devuelve 0 porque las peras ya tienen un valor.
No confundas cero con ausente
if stock.get("pears"): comprueba el valor de verdad del valor devuelto. Cero se considera falso, así que se omite esa rama. La misma prueba también omite una clave ausente cuya consulta devuelve None. Para distinguir esos casos, comprueba directamente la pertenencia de la clave.
Procesa un pedido completo
prices = {"coffee": 3.5, "tea": 2.75}
order = ["tea", "coffee", "tea", "soda"]
total = 0
for item in order:
if item in prices:
total += prices[item]
else:
print("No price for", item)
print(total)
El primer té lleva el total a 2,75, el café lo lleva a 6,25 y el segundo té lo lleva a 9,0. El refresco produce el mensaje No price for soda y no añade nada. Una consulta directa en cada iteración fallaría con el refresco; usar sin aviso un precio predeterminado de cero ocultaría que falta el precio. La rama separada hace visible esa información ausente.
Puntos clave
d[key]lanzaKeyErrorcuando la clave no existe.incomprueba las claves, incluidas aquellas cuyos valores son cero o están vacíos.getdevuelve un valor o un valor predeterminado sin insertar una clave.- Elige un valor predeterminado solo cuando tenga sentido para la tarea.
1.3 Añade, modifica y elimina entradas
Las actualizaciones de diccionarios usan claves para identificar lo que cambia. Asignar un valor puede añadir un par nuevo o sustituir un valor anterior. Eliminar un par también puede devolver información que necesites, como la cantidad retirada de un inventario.
Añade y sustituye
scores = {"Ana": 8}
scores["Ben"] = 6
scores["Ana"] = 9
scores["Ben"] += 2
print(scores)
El resultado es {'Ana': 9, 'Ben': 8}. Se añade a Ben, se actualiza a Ana y después aumenta la puntuación existente de Ben. La línea con += lee primero el valor anterior, así que lanza KeyError para una clave ausente. Los diccionarios no tienen un método append.
Combina diccionarios
update copia pares en un diccionario existente. Con esas puntuaciones, scores.update({"Ben": 7, "Cara": 10}) cambia la de Ben a 7 y añade a Cara con 10.
Desde Python 3.9, el operador de fusión puede construir un diccionario nuevo:
left = {"x": 1, "y": 2}
right = {"y": 5, "z": 3}
merged = left | right
print(merged)
Esto imprime {'x': 1, 'y': 5, 'z': 3}. Para una clave compartida, prevalece el lado derecho. left permanece sin cambios; left |= right actualizaría el objeto original.
update() devuelve None. Escribir scores = scores.update(new_scores) modifica el diccionario anterior y después hace que scores haga referencia a None. Llama a update en una línea propia. Asigna el resultado de left | right cuando quieras un diccionario nuevo fusionado.
Elimina pares
| Operación | Efecto y valor de retorno |
|---|---|
del d[key] | Elimina el par; una clave ausente provoca KeyError. |
d.pop(key) | Elimina el par y devuelve su valor; una clave ausente provoca KeyError. |
d.pop(key, 0) | Devuelve 0 si la clave no existe. |
d.popitem() | Elimina y devuelve como tupla el último par insertado. |
d.clear() | Elimina todos los pares y devuelve None. |
Para {"a": 1, "b": 2, "c": 3}, popitem() devuelve ('c', 3). Esto usa el orden de inserción, no el orden alfabético ni el valor máximo.
Sigue un cambio de inventario
inventory = {"pens": 10, "pads": 4}
inventory["pens"] -= 3
inventory["clips"] = 50
removed = inventory.pop("pads")
La venta deja 7 bolígrafos. Añadir clips crea una clave nueva. Eliminar los blocs almacena 4 en removed y deja {'pens': 7, 'clips': 50}. El valor devuelto por pop permite al programa usar la cantidad retirada después de que el par haya desaparecido.
Inserta solo si no existe
setdefault(key, default) devuelve el valor existente o inserta y devuelve el valor predeterminado cuando la clave no existe. Para stock = {"apples": 12, "pears": 0, "plums": 7}, stock.setdefault("kiwis", 0) inserta los kiwis y devuelve 0. stock.setdefault("apples", 99) devuelve 12 y deja las manzanas sin cambios. Esta inserción es la diferencia con get.
Actualizar una clave existente mantiene su lugar. A partir de {"a": 1, "b": 2, "c": 3}, asignar d["a"] = 10 mantiene "a" en primer lugar. Eliminar "a" y volver a insertarla la coloca después de "c". Sustituir un valor e insertar un par nuevo afectan al orden de manera distinta.
Puntos clave
d[key] = valueañade una clave o sustituye su valor.- Al fusionar diccionarios, para una clave compartida prevalece el valor de la derecha.
popdevuelve un valor eliminado;popitemdevuelve el último par insertado.updateycleardevuelvenNone.setdefaultinserta un valor predeterminado solo para una clave ausente.- Actualizar conserva el lugar de una clave; eliminarla y reinsertarla la mueve al final.
2Recorre diccionarios con bucles y construye otros nuevos
Los bucles convierten un diccionario en un informe, un total o la entrada de una colección nueva. La primera decisión es qué necesita cada iteración: una clave, un valor o ambas partes de un par. La ordenación controla el orden de un informe sin reorganizar el diccionario original. Una comprensión puede expresar una regla breve para conservar o transformar pares, mientras que los bucles normales dejan espacio para varios pasos de procesamiento y comprobaciones.
2.1 Recorre claves, valores y pares clave-valor con bucles
Elige un bucle que te proporcione la parte de cada par que necesitas. Un diccionario por sí solo proporciona claves. Sus vistas pueden proporcionar valores o pares completos, para que no tengas que recuperar información que el bucle podría darte directamente.
Visita claves, valores o pares
temps = {"Mon": 68, "Tue": 75, "Wed": 71}
for day, temp in temps.items():
print(day, temp)
Las temperaturas están en grados Fahrenheit. Esto imprime Mon 68, Tue 75 y Wed 71 en líneas separadas, en orden de inserción. Cada elemento es una tupla de dos elementos que el bucle desempaqueta en day y temp.
| Entrada del bucle | Qué recibe cada iteración |
|---|---|
temps o temps.keys() | Una clave de día |
temps.values() | Un valor de temperatura |
temps.items() | Un par (day, temperature) |
Con for day in temps:, usa temps[day] dentro del bucle cuando necesites el valor correspondiente. Si el programa necesita ambas partes cada vez, .items() suele expresar la tarea con más claridad.
Comprende las vistas
keys(), values() e items() devuelven vistas, que reflejan los cambios posteriores en su diccionario. No son listas y no permiten acceder por índices de posición. temps.keys()[0] lanza TypeError. Convierte a una lista cuando necesites una instantánea con posiciones: list(temps) produce ['Mon', 'Tue', 'Wed'].
Calcula un total o encuentra la clave correspondiente
sum(temps.values()) devuelve 214, y dividir entre len(temps) produce una media de aproximadamente 71,33. max(temps.values()) devuelve 75. Para encontrar qué día tiene ese valor, escribe max(temps, key=temps.get), que devuelve 'Tue'.
El argumento key= proporciona una función que se usa para comparar. Aquí Python visita las claves de día y llama a temps.get para cada una para obtener su temperatura. Escribe el nombre de la función sin llamarla: temps.get, no temps.get(). Si los valores empatan, max devuelve la primera clave que encuentra.
Ordena un informe
sorted(temps) devuelve las claves en orden alfabético. sorted(temps.items()) devuelve los pares ordenados por clave. Para ordenar las claves de día por temperatura, usa sorted(temps, key=temps.get), que produce ['Mon', 'Wed', 'Tue']. Añade reverse=True para obtener ['Tue', 'Wed', 'Mon']. Estas llamadas devuelven listas; no reorganizan temps.
grades = {"Ana": 88, "Ben": 72, "Cara": 95}
passing = 0
for name, grade in grades.items():
print(f"{name}: {grade}")
if grade >= 75:
passing += 1
El informe imprime cada nombre con su calificación. Ana y Cara alcanzan el umbral, así que passing termina en 2.
Elimina entradas sin interrumpir el recorrido
No añadas ni elimines claves mientras iteras directamente sobre un diccionario. Cambiar su tamaño puede lanzar RuntimeError: dictionary changed size during iteration. Sí se permite sustituir un valor existente.
Para eliminar los días más frescos, usa for day in list(temps): y elimina temps[day] cuando su valor sea inferior a 70. El bucle recorre una lista independiente de claves y deja {'Tue': 75, 'Wed': 71} en el diccionario. Construir un diccionario nuevo filtrado es otra forma de separar el recorrido de los cambios.
Puntos clave
- Recorre un diccionario para obtener claves,
.values()para valores o.items()para pares. - Las vistas reflejan los cambios; las listas permiten acceder por posición.
key=d.getcompara los valores almacenados al devolver u ordenar claves.- La ordenación devuelve una lista y deja intacto el orden del diccionario.
- Recorre una copia de la lista de claves cuando elimines entradas.
2.2 Construye diccionarios nuevos a partir de datos existentes
Un diccionario nuevo suele surgir de una regla aplicada a datos existentes. Empieza con un bucle que puedas explicar y después usa una comprensión cuando la misma regla quepa con claridad en una expresión.
Construye un par cada vez
words = ["kiwi", "fig", "banana"]
lengths = {}
for word in words:
lengths[word] = len(word)
Cada iteración elige una palabra como clave y su longitud como valor. El resultado es {'kiwi': 4, 'fig': 3, 'banana': 6}. El diccionario se crea antes del bucle para que los pares anteriores sigan disponibles en las iteraciones posteriores.
Un diccionario por comprensión expresa el mismo trabajo:
lengths = {word: len(word) for word in words}
Lee la parte de for para ver qué se visita y después la expresión anterior para ver qué par se produce. Los dos puntos separan la expresión de la clave de la expresión del valor. Sin esos dos puntos, {word for word in words} construye un conjunto.
Conserva algunos elementos
Una cláusula if filtra la entrada:
grades = {"Ana": 88, "Ben": 72, "Cara": 95}
high_grades = {
name: grade
for name, grade in grades.items()
if grade >= 80
}
Ana y Cara cumplen la condición, lo que produce {'Ana': 88, 'Cara': 95}. El par de Ben queda fuera. El diccionario de entrada no cambia; el resultado contiene solo los pares que cumplen la condición.
Transforma valores
Una comprensión puede conservar los días mientras convierte las lecturas de Fahrenheit a Celsius:
temps = {"Mon": 68, "Tue": 75, "Wed": 71}
celsius = {
day: round((f - 32) * 5 / 9, 1)
for day, f in temps.items()
}
El resultado es {'Mon': 20.0, 'Tue': 23.9, 'Wed': 21.7}. Para el martes, restar 32 da 43; multiplicar por 5 y dividir entre 9 da aproximadamente 23,89. round(..., 1) almacena 23,9. La clave se mantiene mientras cambia el valor.
Empareja listas con cuidado
dict(zip(names, scores)) empareja cada nombre con la puntuación de la misma posición. zip se detiene cuando termina la entrada más corta. Emparejar ["Ana", "Ben", "Cara"] con [90, 85] produce {'Ana': 90, 'Ben': 85}. Ningún error avisa de que falta la puntuación de Cara, así que comprueba las longitudes de entrada cuando cada nombre deba tener una.
Intercambia claves y valores
favorites = {"Ana": "blue", "Ben": "red", "Cara": "blue"}
by_color = {color: name for name, color in favorites.items()}
El resultado es {'blue': 'Cara', 'red': 'Ben'}. Tanto Ana como Cara necesitarían la misma clave nueva, así que el par posterior de Cara sustituye al de Ana. La inversión conserva todos los pares solo cuando los valores anteriores son únicos y aptos para hash. Un valor de tipo lista no puede convertirse en una clave de diccionario. Para conservar varios nombres bajo un color, almacena una lista de nombres bajo ese color.
Usa un bucle normal cuando la tarea necesite varias sentencias, mensajes o comprobaciones. Una comprensión resulta útil porque hace visible una regla breve; comprimir en ella un procedimiento más extenso dificulta seguir la regla.
Puntos clave
- Un diccionario por comprensión produce un par clave-valor por cada elemento de entrada seleccionado.
- Una cláusula
iffiltra; las expresiones del par pueden transformar los datos. zipse detiene al terminar la entrada más corta.- Invertir un diccionario puede hacer que se pierdan entradas cuando los valores se repiten.
3Cuenta y agrupa datos con diccionarios
Los diccionarios pueden reunir resultados mientras un bucle procesa datos. Un contador almacena un número por cada elemento distinto; un diccionario de agrupación almacena varios miembros bajo cada categoría. Ambos patrones deben tratar la primera aparición de una clave y conservar lo acumulado en las iteraciones anteriores. Una vez creados los grupos, sus listas permiten calcular totales y medias, y las herramientas de la biblioteca estándar pueden simplificar la inicialización.
3.1 Cuenta las apariciones de cada elemento
Una tabla de frecuencias responde cuántas veces aparece cada elemento distinto. Sus claves identifican los elementos; sus valores son contadores. El diccionario crece cuando aparece un elemento nuevo, mientras que las apariciones posteriores aumentan un conteo existente.
Sigue la evolución de un contador
counts = {}
for letter in "banana":
if letter in counts:
counts[letter] += 1
else:
counts[letter] = 1
La primera letra crea 'b': 1. La siguiente crea 'a': 1 y después se crea 'n': 1. La siguiente "a" aumenta su conteo existente a 2. Después de las dos últimas letras, el diccionario es {'b': 1, 'a': 3, 'n': 2}. Su orden registra cuándo apareció cada letra por primera vez, no cuál es la más frecuente.
Usa cero antes de la primera aparición
Las dos ramas pueden convertirse en una asignación:
counts = {}
for letter in "banana":
counts[letter] = counts.get(letter, 0) + 1
El lado derecho lee el conteo anterior, usando cero cuando la clave no existe, y después suma uno. El lado izquierdo almacena ese conteo nuevo. get por sí mismo no inserta nada; la asignación sí.
Usar solo counts[letter] += 1 falla cuando una letra es nueva. Mover counts = {} al interior del bucle causa otro problema: cada iteración borra los conteos anteriores. Inicializa una vez antes de procesar los elementos.
Decide qué cuenta como la misma palabra
En un texto, las mayúsculas, las minúsculas y la puntuación afectan a las claves. Las cadenas "The" y "the" son distintas, al igual que "dog." y "dog". Normaliza las formas antes de usarlas como claves:
text = "The cat saw the dog. The dog ran."
counts = {}
for word in text.lower().split():
word = word.strip(".,!?")
counts[word] = counts.get(word, 0) + 1
Esto produce {'the': 3, 'cat': 1, 'saw': 1, 'dog': 2, 'ran': 1}. lower convierte a minúsculas, split separa las palabras por los caracteres de espacio en blanco y strip elimina de los extremos los signos de puntuación indicados. No elimina signos de puntuación del interior de una palabra.
Encuentra los elementos más frecuentes
Para esta tabla no vacía, max(counts, key=counts.get) devuelve 'the'. Para encontrar las dos palabras más frecuentes, usa sorted(counts, key=counts.get, reverse=True)[:2], que produce ['the', 'dog']. Los conteos iguales mantienen su orden original al ordenarse.
El patrón también cuenta números o tuplas. Para los lanzamientos [3, 6, 3, 1, 6, 3], construye {3: 3, 6: 2, 1: 1}. Un valor que nunca se ha observado no tiene entrada. Léelo con un valor predeterminado de cero cuando resulte útil.
Reconoce el atajo de la biblioteca
from collections import Counter
letter_counts = Counter("banana")
print(letter_counts.most_common(1))
print(letter_counts["z"])
Esto imprime [('a', 3)] y después 0. La importación permite usar Counter, de la biblioteca estándar de Python. Un Counter es un diccionario diseñado para contar: sus claves son elementos aptos para hash y la consulta directa de un elemento ausente devuelve cero. Sus conteos para esta entrada se muestran como Counter({'a': 3, 'n': 2, 'b': 1}).
Puntos clave
- Una tabla de frecuencias asocia cada elemento distinto a su conteo.
- Inicializa el diccionario antes del bucle.
counts[item] = counts.get(item, 0) + 1trata tanto elementos nuevos como repetidos.- Normaliza las palabras antes de contarlas cuando debas ignorar las mayúsculas, las minúsculas y la puntuación.
- Compara los conteos con
key=counts.getpara ordenar los elementos por frecuencia. Counterconstruye conteos y devuelve cero al consultar claves ausentes.
3.2 Agrupa elementos y suma valores por categoría
Un diccionario puede almacenar un grupo completo bajo cada clave. La clave nombra la categoría y una lista contiene los elementos que se le asignan. Así, todos los miembros quedan disponibles para calcular totales, medias o informes posteriores.
Construye listas independientes para los grupos
words = ["apple", "bean", "avocado", "beet", "corn"]
groups = {}
for word in words:
first = word[0]
if first not in groups:
groups[first] = []
groups[first].append(word)
Para "apple", el programa crea una lista vacía bajo "a" y añade la palabra. "bean" inicia una lista "b" independiente. "avocado" se incorpora a la lista "a" existente. El resultado es {'a': ['apple', 'avocado'], 'b': ['bean', 'beet'], 'c': ['corn']}.
La lista vacía se crea solo para una etiqueta nueva. Crearla en cada iteración descartaría los miembros anteriores de ese grupo.
Abrevia la inicialización
groups.setdefault(word[0], []).append(word) realiza el mismo paso de agrupación. setdefault devuelve la lista existente si la hay. De lo contrario, almacena la lista vacía proporcionada y la devuelve. El append que sigue modifica esa lista devuelta.
Otra opción crea las listas automáticamente:
from collections import defaultdict
groups = defaultdict(list)
for word in words:
groups[word[0]].append(word)
Pasa list, la función que crea una lista nueva, sin paréntesis. Al consultar una clave ausente, este defaultdict crea y almacena una lista vacía nueva. Incluso una lectura como groups["z"] inserta esa clave ausente. Usa "z" in groups cuando solo quieras comprobar si un grupo existe.
Mantén las listas independientes
groups = dict.fromkeys(["a", "b"], []) coloca la misma lista bajo ambas claves. Añadir 1 mediante groups["a"] produce entonces {'a': [1], 'b': [1]}. Las listas se comparten, no se copian.
Para empezar con listas independientes, usa {key: [] for key in keys}, setdefault con un [] nuevo o defaultdict(list). Cada categoría nueva debe recibir su propio objeto lista.
Suma importes por categoría
El conteo suma uno por aparición. Un total por categoría suma el importe de cada elemento:
expenses = [("food", 12.5), ("travel", 30),
("food", 7.25), ("books", 18)]
totals = {}
for category, amount in expenses:
totals[category] = totals.get(category, 0) + amount
La categoría de alimentación empieza en 12,5 y después suma 7,25, hasta llegar a 19,75. Los viajes suman 30 y los libros suman 18. Almacenar solo amount sustituiría el total anterior en lugar de añadirle el importe.
Calcula la media o elimina duplicados de un grupo
Para scores = {"A": [80, 90], "B": [70]}, recorre scores.items() y calcula sum(values) / len(values). La media del grupo A es 85,0; la del grupo B es 70,0. Comprueba if values: antes de dividir para tratar por separado un grupo vacío.
Cuando las repeticiones deban desaparecer dentro de cada grupo, usa conjuntos como valores. tags.setdefault(post, set()).add(tag) crea un conjunto para una publicación nueva y añade su etiqueta. Una etiqueta repetida sigue siendo un solo elemento; una lista conservaría cada aparición.
Puntos clave
- La agrupación asocia una categoría a sus miembros, a menudo en una lista.
- Crea una lista nueva para cada grupo.
setdefaultydefaultdict(list)simplifican la inicialización de grupos.- Los totales por categoría suman importes; las medias dividen la suma de cada grupo entre su propio número de elementos.
- Usa conjuntos como valores de los grupos cuando deban desaparecer los miembros repetidos.
4Modela datos estructurados con diccionarios anidados
Los campos relacionados pertenecen a un mismo registro, y varios registros pueden organizarse por identificador o mantenerse como filas de una lista. Acceder al valor correcto requiere avanzar por cada nivel en orden. Los informes combinan después un bucle externo de registros con consultas de campos o un bucle interno sobre una lista almacenada. Los campos opcionales ausentes, las listas vacías y los objetos internos compartidos afectan a cómo se deben leer, resumir o copiar esos registros.
4.1 Almacena registros y accede a ellos en diccionarios anidados
Un registro reúne campos relacionados, como la edad, la especialidad y las calificaciones de un estudiante. Un diccionario anidado almacena otro diccionario como valor. Las claves externas pueden identificar registros, mientras que las internas identifican campos.
Lee un nivel cada vez
students = {
"ana": {"age": 19, "major": "math", "grades": [88, 92]},
"ben": {"age": 22, "major": "history", "grades": [75, 81, 79]},
}
students["ana"] proporciona el diccionario del registro de Ana. Añadir ["major"] lee su especialidad, así que students["ana"]["major"] devuelve 'math'. Para la última calificación de Ben, students["ben"]["grades"][-1] accede al registro, después a su lista y después al último elemento de la lista, 79.
Cada consulta actúa sobre el objeto devuelto por la consulta anterior. La misma sintaxis de corchetes puede representar una clave de diccionario en un nivel y una posición de lista en otro.
Cambia un campo o añade un registro
students["ana"]["age"] = 20
students["ben"]["email"] = "ben@example.com"
students["cara"] = {"age": 21, "major": "art", "grades": []}
students["cara"]["grades"].append(90)
Las dos primeras líneas modifican o añaden campos dentro de registros existentes. La tercera añade un registro completo bajo un identificador nuevo. La cuarta accede a la lista de calificaciones de Cara y le añade una puntuación.
Asignar students["dev"]["age"] = 30 falla porque la consulta externa de "dev" se realiza primero y lanza KeyError: 'dev'. Crea el registro antes de asignar sus campos.
Para una lectura opcional, students.get("dev", {}).get("age") devuelve None. El primer valor predeterminado es un diccionario vacío, así que el segundo get tiene un diccionario que leer incluso cuando el registro no existe. En estos registros, cada valor externo es a su vez un diccionario.
Elige una estructura adecuada para el acceso
Una lista de diccionarios mantiene las filas en orden:
rows = [{"name": "Ana", "city": "Austin"},
{"name": "Ben", "city": "Denver"}]
print(rows[1]["city"])
Esto imprime Denver: primero el índice de lista y después la clave del campo. Un diccionario de listas, como {"A": [80, 90], "B": [70]}, almacena varios valores por etiqueta. Estas estructuras pueden combinarse cuando un registro necesita tanto campos con nombre como una lista ordenada.
Cuando los nombres identifican las filas de forma única, construye by_name = {row["name"]: row for row in rows}. Después, by_name["Ben"] encuentra directamente la fila de Ben. Los valores son los diccionarios de fila existentes, así que las modificaciones mediante este índice también afectan a esas filas. Si los nombres se repiten, una fila posterior sustituye a una anterior bajo esa clave.
Copia los datos anidados de forma consciente
backup = students comparte el diccionario completo. backup = students.copy() crea un diccionario externo independiente, pero mantiene los mismos registros internos. Después de esa copia superficial, backup["ana"]["age"] = 99 también cambia la edad de Ana en students.
import copy
independent = copy.deepcopy(students)
independent["ana"]["age"] = 25
Para estos diccionarios y listas anidados, la copia profunda también crea objetos internos independientes. Cambiar la edad copiada deja intacta la original. Usa nombres de campo coherentes entre registros para que el mismo código de consulta funcione con cada registro.
Puntos clave
- Las consultas encadenadas avanzan por una colección cada vez.
- Crea un diccionario interno antes de asignar un campo dentro de él.
- Una lista de registros usa primero un índice; un diccionario de registros usa un identificador.
- Una copia superficial comparte los registros internos; una copia profunda separa los datos mutables anidados.
4.2 Recorre datos anidados con bucles y resúmelos
Procesar datos anidados implica seguir en qué nivel se encuentra el bucle. Un bucle externo elige un registro. Una consulta de campo accede a un valor dentro de ese registro, y un bucle interno puede recorrer después los elementos de una lista almacenada.
Resume un registro por iteración
students = {
"ana": {"major": "math", "grades": [88, 92]},
"ben": {"major": "history", "grades": [75, 81, 79]},
"cara": {"major": "art", "grades": []},
}
for name, info in students.items():
grades = info["grades"]
major = info["major"]
if grades:
average = sum(grades) / len(grades)
print(f"{name}: {major}, average {average:.1f}")
else:
print(f"{name}: {major}, no grades")
Las calificaciones de Ana suman 180, así que su media es 90,0. El total de Ben es 235 entre tres calificaciones, lo que da aproximadamente 78,33; el formato :.1f muestra 78,3. La lista de Cara está vacía, así que el programa imprime cara: art, no grades sin dividir entre cero.
Asignar grades y major dentro del bucle da a cada nombre los valores del registro actual. La media también debe estar dentro del bucle: hay que calcularla por separado para cada estudiante.
Lee campos opcionales
info.get("email", "no email") proporciona un texto para un campo de correo electrónico opcional. Una consulta directa con info["email"] lanzaría KeyError para un registro que no lo tuviera. El valor predeterminado debe situarse en el nivel donde puede faltar el campo. El get del diccionario externo buscaría identificadores de estudiantes, no campos de correo electrónico.
Selecciona registros
math_students = []
for name, info in students.items():
if info["major"] == "math":
math_students.append(name)
Esto produce ['ana']. La condición lee un campo del registro actual; el valor añadido es la clave externa. Si el informe necesitara registros completos, podría añadir info en su lugar. Decide qué tipo de resultado necesita la siguiente parte del programa.
Visita cada calificación almacenada
count = 0
for info in students.values():
for grade in info["grades"]:
if grade > 80:
count += 1
El bucle interno visita el 88 y el 92 de Ana, y después el 75, el 81 y el 79 de Ben. La lista vacía de Cara no añade iteraciones. Tres calificaciones superan 80: 88, 92 y 81. El conteo se inicializa fuera de ambos bucles porque describe a todos los estudiantes en conjunto. Reiniciarlo dentro del bucle externo conservaría solo el conteo del último registro.
Cuenta registros por un campo
majors = {}
for info in students.values():
major = info["major"]
majors[major] = majors.get(major, 0) + 1
Cada registro aporta uno a su especialidad. Solo con Ana y Ben, el resultado es {'math': 1, 'history': 1}; incluir a Cara añade 'art': 1. Para sumar o agrupar otro campo, conserva el bucle externo de registros y cambia el valor que aporta.
Para obtener informes legibles, imprime una línea con formato por registro en lugar de todo el diccionario anidado. En una cadena formateada, almacena primero un campo en una variable, como arriba, o usa el tipo de comillas opuesto dentro de las llaves, como en f"{name}: {info['major']}".
Puntos clave
- Un bucle externo elige un registro; las consultas de campos actúan dentro de él.
- Comprueba si una lista está vacía antes de dividir entre su longitud.
- Usa
getsobre el registro para un campo opcional. - Un bucle interno visita cada elemento de la lista de un registro.
- Coloca un acumulador fuera de los bucles cuyos resultados combina.
5Usa conjuntos para eliminar duplicados y comparar colecciones
Los conjuntos se centran en qué valores están presentes. Eliminar duplicados y comparar pertenencias se convierten en operaciones directas, desde encontrar estudiantes inscritos en cursos comunes hasta comprobar qué competencias faltan. El orden y las apariciones repetidas requieren otras colecciones, así que la elección importa antes de convertir los datos. Los conjuntos también se relacionan con los diccionarios: sus claves pueden compararse como conjuntos aunque los valores almacenados sean diferentes.
5.1 Crea conjuntos y elimina duplicados
Un conjunto registra qué valores distintos están presentes. Conserva cada elemento una vez y no tiene un orden garantizado. Los conjuntos son adecuados para comprobar la pertenencia y eliminar duplicados cuando el número de apariciones no importa.
Crea un conjunto
colors = {"red", "green"}
numbers = set([3, 1, 3, 2, 1])
print(len(numbers))
print(sorted(numbers))
Esto imprime 3 y después [1, 2, 3]. Las entradas repetidas se convierten en un solo elemento. Un conjunto vacío es set(); {} crea un diccionario vacío.
set("banana") visita los caracteres de la cadena y deja las letras distintas "a", "b" y "n". {"banana"} proporciona la cadena completa como un elemento. Como ocurre con las claves de diccionario, los valores numéricos iguales cuentan una vez: {1, 1.0, True} tiene un elemento.
Los elementos deben ser aptos para hash. Los números, las cadenas y las tuplas de valores aptos para hash sirven; las listas, los diccionarios y los conjuntos ordinarios no. Usa (1, 2) para un elemento de coordenadas en lugar de [1, 2]. Un frozenset es un conjunto inmutable y puede ser a su vez un elemento de conjunto o una clave de diccionario.
Trabaja sin posiciones
colors[0] lanza TypeError porque un conjunto no tiene posiciones. Su orden de impresión no está garantizado, y los elementos de cadena pueden imprimirse en otro orden en una ejecución distinta. sorted(colors) produce una lista nueva ordenada cuando los elementos se pueden comparar. No asigna un orden al conjunto.
Cambia los miembros
| Operación | Qué ocurre |
|---|---|
s.add(x) | Añade un elemento; un duplicado no tiene efecto. |
s.update(items) | Añade elementos de un iterable. |
s.remove(x) | Elimina x; un elemento ausente provoca KeyError. |
s.discard(x) | Elimina x si está presente; se permite que no exista. |
s.pop() | Elimina y devuelve un elemento arbitrario. |
s.clear() | Elimina todos los elementos. |
add("blue") añade una cadena. update(["blue", "gold"]) añade dos cadenas. Usar update("blue") añade, en cambio, caracteres separados, porque una cadena es iterable. Los conjuntos no tienen un método append.
Conserva las primeras apariciones cuando sea necesario
list(set(items)) elimina duplicados, pero pierde su orden original. Si las primeras apariciones importan, usa el orden de inserción de los diccionarios:
items = [3, 1, 3, 2, 1]
unique = list(dict.fromkeys(items))
print(unique)
Esto imprime [3, 1, 2]. Los valores se convierten en claves de diccionario, así que cada uno aparece una vez en el orden en que se encontró por primera vez.
También puedes hacer explícitas las funciones de cada colección:
seen = set()
unique = []
for item in items:
if item not in seen:
seen.add(item)
unique.append(item)
El conjunto responde si un elemento ya ha aparecido; la lista conserva las primeras apariciones en orden. Ambas formas requieren elementos de entrada aptos para hash.
Cuenta elementos distintos o comprueba la pertenencia
Para las ocho palabras de "the cat saw the dog the dog ran".split(), len(set(words)) es 5: the, cat, saw, dog y ran. Esto cuenta palabras diferentes, no sus frecuencias.
Un conjunto de remitentes bloqueados permite que sender in blocked responda si una dirección está presente. En colecciones grandes, comprobar la pertenencia en conjuntos y diccionarios suele ser mucho más rápido que buscar en una lista elemento por elemento.
Puntos clave
- Un conjunto almacena elementos únicos aptos para hash sin un orden garantizado.
- Usa
set()para un conjunto vacío;{}es un diccionario. removelanza una excepción si el elemento no existe;discardpermite que esté ausente.sorted(s)devuelve una lista; los elementos de un conjunto no tienen posiciones.list(dict.fromkeys(items))elimina repeticiones y conserva las primeras apariciones.len(set(items))cuenta valores distintos.
5.2 Compara colecciones con operaciones de conjuntos
Las operaciones de conjuntos expresan preguntas sobre la pertenencia a dos colecciones. Usa la operación que corresponda a la pregunta: cualquier miembro de cualquiera de las colecciones, solo los miembros compartidos o los miembros que quedan tras las exclusiones.
Lee las cuatro operaciones
Supón que las inscripciones en los cursos son:
python = {"Ana", "Ben", "Cara", "Dev"}
sql = {"Ben", "Dev", "Eli"}
| Expresión | Regla de pertenencia | Miembros, en orden alfabético |
|---|---|---|
| `python | sql` | En cualquiera de los conjuntos o en ambos |
python & sql | En ambos conjuntos | Ben, Dev |
python - sql | En Python, pero no en SQL | Ana, Cara |
python ^ sql | En exactamente un conjunto | Ana, Cara, Eli |
La unión incluye a los cinco estudiantes una vez. La intersección conserva solo a los dos estudiantes compartidos. La diferencia parte del conjunto de la izquierda y excluye todo lo que esté en el de la derecha. Invertir la diferencia cambia la pregunta: sql - python contiene solo a Eli. La diferencia simétrica conserva las dos partes que no se solapan; equivale a la unión menos la intersección.
Las formas con métodos son python.union(sql), python.intersection(sql), python.difference(sql) y python.symmetric_difference(sql).
Comprueba una relación
a <= b pregunta si todos los miembros de a pertenecen a b. Esa es la comprobación de subconjunto. a < b exige además que b tenga al menos un miembro adicional, lo que convierte a a en un subconjunto propio. a >= b y a > b comprueban las relaciones de superconjunto correspondientes.
print({"Ben"} <= sql)
print(sql <= sql)
print(sql < sql)
print(python.isdisjoint(sql))
Esto imprime True, True, False y False. Un conjunto es subconjunto de sí mismo, pero no subconjunto propio de sí mismo. Los conjuntos disjuntos no tienen ningún miembro compartido; Python y SQL comparten a Ben y Dev. Los métodos issubset e issuperset también devuelven resultados booleanos.
Mantén los resultados separados o modifica un conjunto
result = a | b crea un conjunto nuevo y deja ambas entradas sin cambios. Las formas a |= b, a &= b, a -= b y a ^= b modifican el objeto a original para que contenga la unión, la intersección, la diferencia o la diferencia simétrica. Cualquier otro nombre que haga referencia a ese mismo conjunto refleja el cambio.
Los métodos de conjuntos aceptan iterables como las listas. python.union(["Fay"]) funciona. Los operadores ordinarios de conjuntos requieren operandos de tipo conjunto: {"a"} | ["b"] lanza TypeError.
Usa | para combinar conjuntos, no +. Distingue también & de and: {1, 2} and {3} devuelve {3} porque el conjunto de la izquierda se considera verdadero (truthy). No calcula los miembros comunes.
Encuentra los requisitos que faltan
required = {"python", "sql", "git"}
skills = {"python", "excel", "git"}
missing = required - skills
extra = skills - required
qualified = required <= skills
El conjunto de competencias que faltan contiene "sql"; el de competencias adicionales contiene "excel". La intersección contiene "git" y "python". qualified es False porque falta al menos una competencia obligatoria. Una persona candidata puede tener muchas competencias y aun así no superar la comprobación de subconjunto: todos los miembros requeridos deben estar presentes.
Puntos clave
|toma los elementos de cualquiera de los conjuntos,&los de ambos y^los de exactamente uno.a - bconserva solo los miembros deaque no están enb.<=permite conjuntos iguales;<exige un subconjunto propio.isdisjointcomprueba si no hay miembros compartidos.- Los operadores ordinarios de conjuntos crean resultados; las formas que actúan sobre el objeto original modifican el conjunto de la izquierda.
5.3 Elige la colección adecuada para una tarea
Elige una colección según la tarea que deba realizar el programa con ella. El orden, las repeticiones, la consulta por nombre y la posibilidad de modificarla son necesidades distintas. Un programa puede usar varios tipos de colecciones porque las diferentes partes de sus datos cumplen funciones distintas.
Compara las colecciones incorporadas
| Tipo | Cómo accedes a los datos | Orden y repeticiones | ¿Se puede modificar la colección? |
|---|---|---|---|
| Lista | Por posición | Con orden; permite repeticiones | Sí |
| Tupla | Por posición | Con orden; permite repeticiones | No |
| Diccionario | Por clave | Orden de inserción; claves únicas | Sí |
| Conjunto | Por pertenencia | Sin orden garantizado; elementos únicos | Sí |
Una lista es adecuada para una secuencia de eventos: el orden importa y el mismo evento puede ocurrir más de una vez. Una tupla es adecuada para un grupo fijo de valores relacionados, como unas coordenadas. Una tupla puede contener un objeto mutable, así que sus posiciones fijas no hacen inmutables todos los objetos que contiene. Solo una tupla de elementos aptos para hash puede ser una clave de diccionario o un elemento de conjunto.
Un diccionario es adecuado para información con nombre: un identificador lleva a un registro o el nombre de un producto lleva a una cantidad. Sus valores pueden repetirse y pueden ser colecciones completas. Un conjunto es adecuado para una pregunta de pertenencia: el programa necesita saber si un identificador está presente, no un valor separado asociado a él.
Conserva la información que necesita la tarea
Convertir [1, 2, 1] en un conjunto pierde tanto la aparición repetida como la secuencia. Esto resulta útil para una lista de elementos distintos, pero es incorrecto para un registro completo de eventos. Un diccionario como {"reader": True, "editor": True} puede convertirse a menudo en {"reader", "editor"} cuando los valores no aportan información adicional. Si cada rol necesita un nivel de permisos, conserva el diccionario.
La igualdad sigue el significado de cada colección. [1, 2] == [2, 1] es False porque el orden de la secuencia es distinto. {1, 2} == {2, 1} es True. Los diccionarios con pares clave-valor iguales son iguales al compararlos aunque las claves se hayan insertado en órdenes diferentes. Su orden de inserción afecta a la iteración, no a esa prueba de igualdad.
Compara claves de diccionario como conjuntos
store_a = {"pens": 10, "pads": 4, "ink": 2}
store_b = {"pads": 7, "clips": 30, "ink": 5}
common = store_a.keys() & store_b.keys()
only_a = store_a.keys() - store_b.keys()
Las claves comunes son "ink" y "pads"; only_a contiene "pens". Son los productos que se venden, independientemente de sus cantidades. Las dos tiendas tienen distintas cantidades de tinta, pero la tinta sigue siendo una clave compartida.
Las vistas de claves de diccionario admiten operaciones de conjuntos porque las claves son únicas y aptas para hash. Las vistas de valores no admiten estos operadores: store_a.values() & {1} lanza TypeError. Es posible convertir los valores en un conjunto cuando son aptos para hash, pero eso descarta los valores repetidos y plantea una pregunta distinta de comparar las claves de productos.
Combina estructuras en un programa
Una biblioteca puede usar un diccionario de identificadores de libros asociados a diccionarios de registro, un conjunto de identificadores de libros actualmente prestados y una lista de los préstamos de hoy en orden cronológico. Una tupla como ("Dune", 1965) mantiene juntos un título y un año. El diccionario encuentra los detalles de un libro; el conjunto comprueba si está prestado; la lista conserva el historial del día.
Puntos clave
- Usa diccionarios para consultar por nombre o identificador y conjuntos para registrar la pertenencia sin repeticiones.
- Usa listas para secuencias ordenadas y modificables, y tuplas para grupos fijos.
- La igualdad de listas depende del orden; la de diccionarios y conjuntos no.
- Las operaciones de conjuntos con vistas de claves comparan las claves, no los valores almacenados bajo ellas.
Ejemplos de Diccionarios y conjuntos en Python
1Construye y mantén un diccionario de existencias
14 pasos
- 1IntroducciónEncuentra información por un nombre
Un inventario necesita conectar el nombre de un producto con su cantidad. Un diccionario almacena esa relación como un par clave-valor: el nombre es la clave y la cantidad es el valor.
Construirás un inventario pequeño, decidirás qué significa un producto ausente y seguirás los cambios en productos existentes y nuevos. Lleva por separado dos aspectos: si una clave existe y qué valor almacena.
- 2EjemploEscribe el primer inventario
stock = {"pens": 10, "pads": 4}Cada signo de dos puntos une una clave con su valor, y la coma separa los pares.
stock["pens"]lee10;len(stock)es2, el número de pares.La clave identifica el producto.
stock[0]buscaría la clave0, no el primer producto. Aunque los diccionarios conservan el orden de inserción, se sigue accediendo a sus entradas mediante claves. - 3ExplicaciónElige claves que Python pueda almacenar
Las claves deben ser aptas para hash. Las cadenas y los números sirven, al igual que las tuplas que solo contienen elementos aptos para hash. Una ubicación como
(2, 3)puede ser una clave, mientras que la lista[2, 3]no.Los valores pueden ser de cualquier tipo, incluidas listas o diccionarios. Esta regla se aplica a la clave, así que almacenar una lista como valor no impide que el par sea válido.
- 4DesafíoCuenta los pares almacenados
¿Cuál es la longitud de
{"pens": 10, "pads": 4, "pens": 7}y qué valor se almacena para"pens"?---reveal---
La longitud es
2y los bolígrafos tienen el valor7. El par posterior sustituye el valor anterior bajo la misma clave. No crea una segunda entrada de bolígrafos. Distintas claves pueden compartir un valor, pero una clave no puede contener dos pares separados. - 5ExplicaciónDecide qué significa la ausencia
stock["clips"]lanzaKeyErrorporque el inventario actual no tiene una clave de clips. Usa la consulta directa cuando un registro sea obligatorio y su ausencia requiera atención.En cambio,
stock.get("clips", 0)devuelve el valor alternativo cero sin añadir clips. Eso sirve para un cálculo en el que un producto ausente deba contar como si no hubiera existencias almacenadas. El diccionario sigue teniendo dos entradas después de esta llamada. - 6Idea claveUn cero almacenado sigue teniendo una clave
Supón que
stock["pads"] = 0registra que los blocs están agotados."pads" in stocksigue siendoTrueporque el registro existe.if stock.get("pads"):omite la rama porque cero se considera falso. Esa prueba no puede distinguir un producto agotado de un registro ausente que devuelveNone. Cuando la pregunta sea si un registro existe, comprueba la clave conin. - 7DesafíoMantén visibles los productos agotados
A partir de
stock = {"pens": 10, "pads": 0}, un informe debe mostrar la cantidad de blocs e imprimir"missing"para un producto ausente. ¿Qué prueba debe decidir si se leestock[item]?---reveal---
Usa
if item in stock:. Los blocs cumplen esa prueba y se muestra cero. En la ramaelse, imprime"missing". Una prueba del valor de verdad de la cantidad devuelta trataría incorrectamente el registro del producto agotado como ausente. - 8EjemploAplica una venta y una entrega
Empieza un inventario nuevo:
stock = {"pens": 10, "pads": 4} stock["pens"] -= 3 stock["clips"] = 50La venta lee la cantidad anterior de bolígrafos y almacena
7. La entrega crea una clave nueva de clips con el valor50. La línea con-=requiere que la clave de bolígrafos ya exista; una asignación simple puede crear una clave ausente. Un diccionario no tiene un métodoappend. - 9EjemploRecupera una cantidad eliminada
Continúa con el inventario:
removed = stock.pop("pads")removedpasa a ser4y el diccionario pasa a ser{"pens": 7, "clips": 50}.popmodifica la colección y también devuelve el valor eliminado.Usa
del stock["pads"]cuando solo necesites eliminar. Ambas formas lanzanKeyErrorsi la clave no existe, salvo quepopreciba un valor predeterminado, como enstock.pop("pads", 0). - 10DesafíoTrata una segunda eliminación
El inventario actual es
{"pens": 7, "clips": 50}. ¿Qué devuelvestock.pop("pads", 0)y qué ocurre con el inventario?---reveal---
Devuelve
0y deja el inventario sin cambios porque los blocs ya no están. El valor predeterminado evita un error de clave ausente; no crea un par de blocs. Si la clave existiera, se eliminaría y se devolvería su valor almacenado. - 11ExplicaciónFusiona configuraciones sin perder la base
Para dos diccionarios,
base | overridescrea un resultado nuevo y da prioridad al lado derecho para las claves compartidas:base = {"size": 2, "color": "blue"} result = base | {"size": 5}resulttiene tamaño5y color"blue";basesigue teniendo tamaño2. Este operador está disponible desde Python 3.9. En cambio,base.update(overrides)modificaría la base y devolveríaNone. - 12ConsejoSigue el orden a través de los cambios
Sustituir un valor mantiene su clave en su lugar. Eliminar una clave y volver a añadirla la coloca al final.
popitem()elimina el último par insertado, no el valor máximo.Distingue también los valores de retorno de los métodos:
update()yclear()devuelvenNone, mientras quepop()devuelve un valor. No asignes el resultado de una actualización al nombre que necesitas para el diccionario. - 13DesafíoUsa un valor predeterminado sin sobrescribir
Un programa empieza con
stock = {"pens": 7}. Llama astock.get("clips", 20), después astock.setdefault("clips", 5)y luego suma2astock["clips"]. ¿Cuál es la cantidad final de clips?---reveal---
Es
7.getdevuelve20, pero no inserta nada. Después,setdefaultcrea los clips con5y la actualización final suma2. Un valor predeterminado de consulta no es un valor almacenado a menos que una operación lo inserte. - 14RepasoSigue la clave y el valor
Construye un diccionario a partir de pares clave-valor y después elige de forma consciente el comportamiento de la consulta: acceso directo para registros obligatorios,
inpara la existencia ygetpara un valor alternativo.Las asignaciones añaden o sustituyen. Los métodos de eliminación pueden devolver datos útiles, y la fusión puede crear un diccionario nuevo o modificar uno existente. Al seguir la ejecución del código, registra cada inserción, sustitución de valor y eliminación en orden.
2Convierte los datos de diccionarios en informes
12 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónElige qué recibe cada bucle
- 2EjemploRecibe ambas partes de un par
- 3Idea claveUna vista mantiene la conexión
- 4EjemploOrdena por un valor almacenado
- 5DesafíoMantén los nombres en orden de valor
- 6EjemploConstruye un diccionario con un bucle
- 7ConexiónExpresa la misma regla de forma compacta
- 8EjemploFiltra primero y después produce el par
- 9DesafíoCombina un filtro y una transformación
- 10ConsejoComprueba los pares antes de construir
- 11DesafíoElimina entradas bajas sin alterar el bucle
- 12RepasoAjusta la entrada al resultado
3Construye conteos, grupos y totales por categoría
13 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónHaz que cada categoría acumule un resultado
- 2EjemploDa a un elemento nuevo su primer conteo
- 3EjemploUsa cero para un elemento aún no visto
- 4DesafíoEncuentra por qué un conteo nunca aumenta
- 5ConsejoNormaliza antes de elegir la clave
- 6ExplicaciónConserva los miembros de cada grupo
- 7EjemploSigue una actualización de un valor de tipo lista
- 8Idea claveCada grupo necesita una lista independiente
- 9DesafíoPredice la creación automática de un grupo
- 10EjemploSuma importes en lugar de apariciones
- 11EjemploCalcula la media de los valores de cada grupo
- 12DesafíoElige qué aporta cada registro
- 13RepasoConserva el resultado entre iteraciones
4Lee y resume registros anidados
11 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónDistingue los identificadores de registro de los campos
- 2EjemploSigue la ruta hasta una puntuación
- 3DesafíoAñade un campo a un registro nuevo
- 4Idea claveCopiar el exterior puede mantener compartido el interior
- 5DesafíoMantén independientes las calificaciones de prueba
- 6EjemploCalcula una media por registro
- 7ConsejoTrata un registro sin calificaciones
- 8ConexiónLee los campos en el nivel del registro
- 9EjemploVisita todas las calificaciones de los registros
- 10DesafíoCombina un campo y una lista almacenada
- 11RepasoMantén visible cada nivel
5Compara la pertenencia y elige colecciones
15 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónPregunta quién pertenece a cada colección
- 2ExplicaciónRegistra la pertenencia sin duplicados
- 3ConsejoAñade y elimina el elemento previsto
- 4EjemploConserva las primeras apariciones
- 5DesafíoConserva la secuencia original de etiquetas distintas
- 6EjemploEncuentra a todos o solo a los estudiantes compartidos
- 7EjemploLee la diferencia de izquierda a derecha
- 8DesafíoEncuentra a quienes pertenecen a exactamente un club
- 9ExplicaciónComprueba todos los requisitos
- 10Idea claveDistingue un resultado de un conjunto modificado
- 11ConexiónConserva el historial, la identidad y la pertenencia
- 12EjemploCompara claves sin comparar cantidades
- 13DesafíoElige una colección para un registro que crece
- 14DesafíoCombina vistas de claves con una comprobación de registros ausentes
- 15RepasoElige primero la pregunta de pertenencia
Ejercicios de Diccionarios y conjuntos en Python
Set 1: Lee y modifica colecciones de Python10 Preguntas de Práctica
Pregunta 1 de 10
{"oak": 4, "pine": 7, "oak": 9}?Mostrar respuestaOcultar respuesta
"oak" conserva su último valor, 9, así que el diccionario tiene las dos claves "oak" y "pine". Contar los tres pares escritos pasa por alto la sustitución: un diccionario no puede contener dos entradas separadas bajo la misma clave. El número de elementos es el número de claves distintas.Pregunta 2 de 10
levels = {"east": 0, "west": 5}, ¿qué devuelve "east" in levels?Mostrar respuestaOcultar respuesta
"east" es una clave, y está presente con un valor almacenado de cero. Un valor cero hace que una prueba de su valor de verdad sea falsa, pero no elimina la clave. El resultado de in es un booleano, no el valor almacenado bajo la clave.Pregunta 3 de 10
¿Qué imprime este código?
seats = {"front": 6, "back": 8}
removed = seats.pop("front")
seats["back"] -= 2
print(removed, seats["back"])
Mostrar respuestaOcultar respuesta
pop("front") elimina el par y devuelve su valor, así que removed pasa a ser 6. El conteo restante de asientos traseros baja de 8 a 6. Tratar pop como un método que devuelve None lo confunde con métodos como clear, que modifican una colección sin devolver un elemento.Pregunta 4 de 10
sum({"small": 3, "large": 9}.values())?Mostrar respuestaOcultar respuesta
3 y 9, y sum los suma para obtener 12. Que haya dos pares clave-valor no hace que la suma sea 2; eso sería la longitud del diccionario. Llamar a .values() selecciona las cantidades que necesita el cálculo.Pregunta 5 de 10
{name: len(name) for name in ["elm", "cedar"]}?Mostrar respuestaOcultar respuesta
len(name) proporciona el valor correspondiente: 3 para "elm" y 5 para "cedar". Invertir los pares requeriría colocar la expresión de longitud antes de los dos puntos y la expresión del nombre después.Pregunta 6 de 10
¿Cuál es el valor de counts["up"] después de este bucle?
counts = {}
for move in ["up", "left", "up", "up"]:
counts[move] = counts.get(move, 0) + 1
Mostrar respuestaOcultar respuesta
"up" almacena 1, el segundo lo aumenta a 2 y el tercero lo aumenta a 3. La entrada "left" tiene su propio contador y no aumenta "up". Contar las cuatro iteraciones del bucle daría el número total de movimientos, no la frecuencia de este movimiento concreto.Pregunta 7 de 10
¿Cuál es el valor de groups["r"] después de este código?
groups = {}
for word in ["rose", "mint", "reed"]:
groups.setdefault(word[0], []).append(word)
Mostrar respuestaOcultar respuesta
"r" y añade "rose"; más tarde, "reed" se incorpora a esa misma lista. El grupo "m" contiene "mint" por separado. setdefault conserva una lista existente, así que no la sustituye por una lista vacía nueva en la última iteración.Pregunta 8 de 10
devices = {"d7": {"ports": [2, 4, 8]}}, ¿qué devuelve devices["d7"]["ports"][-1]?Mostrar respuestaOcultar respuesta
[-1] selecciona el último elemento de la lista, 8. Una clave de diccionario y un índice de lista cumplen funciones distintas dentro de la cadena. La longitud de la lista es 3, pero la expresión solicita un elemento, no su longitud.Pregunta 9 de 10
len(set([8, 2, 8, 5, 2]))?Mostrar respuestaOcultar respuesta
8, 2 y 5. Las apariciones repetidas no crean elementos nuevos, así que la longitud es 3. La lista de entrada tiene cinco posiciones, pero convertirla en un conjunto descarta las apariciones adicionales antes de evaluar len.Pregunta 10 de 10
{"read", "write"}. Una cuenta tiene {"read", "share"} y una nueva concesión añade {"write"}. ¿Qué expresión comprueba si la cuenta cumple todos los requisitos después de la concesión?Mostrar respuestaOcultar respuesta
Set 2: Sigue consultas, grupos y registros10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
rates = {"basic": 7} y result = rates.get("plus", 0), ¿cuáles son los valores de result y len(rates)?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
¿Qué imprime este código?
settings = {"sound": 2, "light": 4}
settings.update({"sound": 5})
del settings["sound"]
settings["sound"] = 1
print(list(settings))
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
wait = {"A": 9, "B": 3, "C": 6}, ¿qué devuelve sorted(wait, key=wait.get)?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
¿Qué imprime este código?
from collections import Counter
counts = Counter([4, 4, 7])
print(counts[9])
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
¿Qué imprime este código?
groups = dict.fromkeys(["indoor", "outdoor"], [])
groups["indoor"].append(12)
groups["outdoor"].append(18)
print(groups["indoor"])
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
¿Qué imprime este código?
original = {"r1": {"visits": 2}}
backup = original.copy()
backup["r1"]["visits"] += 3
backup["r2"] = {"visits": 1}
print(original["r1"]["visits"], "r2" in original)
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
{"scores": []}. ¿Qué condición debe proteger sum(scores) / len(scores) después de scores = record["scores"]?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
"paused" de states y permite que no esté presente?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
morning = {"Ivo", "June", "Kai"} y evening = {"June", "Mina"}, ¿cuáles son los miembros de morning ^ evening?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 3: Depura transformaciones de colecciones10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
len({1: "first", True: "second", "1": "third"})?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
"missing" cuando no exista la clave del producto. ¿Qué cuerpo de función cumple ese requisito?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
¿Qué diccionario queda después de esta inversión?
team = {"Luz": "design", "Omar": "support", "Pia": "design"}
by_role = {role: name for name, role in team.items()}
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
"Go go! Stop." usando lower().split() y word.strip(".,!?"), ¿cuál es el conteo de "go"?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
[("repair", 14), ("delivery", 6), ("repair", 9)]. Con totals[category] = totals.get(category, 0) + amount, ¿cuál es el valor de totals["repair"]?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
records.get("x9", {}).get("email", "none") cuando "x9" no existe?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
¿Qué imprime este código?
records = {"a": {"scores": [6, 9]}, "b": {"scores": [8]},
"c": {"scores": []}}
count = 0
for info in records.values():
for score in info["scores"]:
if score >= 8:
count += 1
print(count)
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
list(dict.fromkeys(["z", "m", "z", "a"]))?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
{2, 5} < {2, 5}?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
¿Qué imprime este código?
first = {"lamp": 4, "cord": 9, "plug": 2}
second = {"cord": 3, "plug": 8, "case": 5}
result = {name: first[name]
for name in first.keys() & second.keys()
if first[name] < second[name]}
print(sorted(result.items()))
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 4: Combina técnicas de colecciones10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
¿Qué imprime este código?
stock = {"bolts": 0}
first = stock.get("nuts", 4)
second = stock.setdefault("nuts", 6)
print(first, second, len(stock))
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
¿Qué imprime este código?
base = {"size": 2, "mode": 1}
alias = base
merged = base | {"size": 5}
alias["mode"] = 3
print(merged["size"], merged["mode"], base["size"])
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
¿Qué imprime este código?
levels = {"low": 2, "high": 8, "mid": 5}
view = levels.keys()
for name in list(levels):
if levels[name] < 5:
del levels[name]
print(list(view))
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
¿Qué produce este código?
names = ["Rae", "Sol", "Tia"]
scores = [7, 9]
result = {name: score * 2 for name, score in zip(names, scores)
if score >= 8}
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
¿Qué imprime este código?
from collections import defaultdict
groups = defaultdict(list)
groups["red"].append(5)
unused = groups["blue"]
print(len(groups), len(unused))
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
¿Qué media global producen estos datos cuando todas las puntuaciones tienen el mismo peso?
records = {"p": {"scores": [10, 20]},
"q": {"scores": [90]}, "r": {"scores": []}}
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
¿Qué imprime este código?
records = {"v1": {"team": "north", "scores": [2, 6]},
"v2": {"team": "south", "scores": []},
"v3": {"team": "north", "scores": [4]}}
totals = {}
for info in records.values():
team = info["team"]
for score in info["scores"]:
totals[team] = totals.get(team, 0) + score
print(totals.get("south", 0), totals["north"])
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
¿Qué imprime este código?
required = {"a", "b", "c"}
current = {"a", "d"}
missing = required - current
current |= {"b"}
print(sorted(missing), sorted(required - current))
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
¿Qué imprime este código?
left = {"x": 2, "y": 4}
right = {"y": 4, "x": 2}
print(left == right, list(left) == list(right))
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
¿Te atascas con una pregunta tuya? Ayuda con Tareas
Términos Clave
A
Actualización
stock.update({"soap": 6}) realiza una actualización y devuelve None, no el diccionario actualizado.Acumulador
Agrupación
"map" y "memo" en la misma lista "m".Apto para hash
(4, 7) es apta para hash y puede identificar una ubicación en una cuadrícula, mientras que la lista [4, 7] no.B
Bucle anidado
C
Campo opcional
get permite proporcionar un valor alternativo sin lanzar KeyError."no email" cuando un registro de estudiante no lo contiene.Clave
"glue" recupera la cantidad 3 de un diccionario que almacena cantidades por nombre de producto.Clave de comparación
key=, que se usa para comparar elementos mientras los resultados conservan los elementos originales.sorted(wait, key=wait.get), cada tiempo de espera almacenado es la clave de comparación del nombre de su estación.Comprobación de lista no vacía
if scores: evita que un registro sin puntuaciones provoque una división entre cero.Comprobación de pertenencia
in o not in para preguntar si una colección contiene un elemento; en un diccionario comprueba las claves."soap" in stock sigue siendo verdadera cuando la cantidad de jabón almacenada es cero.Conjunto
Conjunto inmutable (frozenset)
Conjuntos disjuntos
a.isdisjoint(b) devuelve True.Consulta encadenada
devices["d7"]["ports"][0] accede a un registro, a su lista de puertos y después al primer puerto.Consulta por clave
prices["juice"] recupera el precio almacenado, siempre que el diccionario tenga una clave "juice".Copia profunda
Copia superficial
Counter
"level" registra dos apariciones de "l", dos de "e" y una de "v".D
Desempaquetado de tuplas
for name, score in scores.items(): hace que ambas partes estén disponibles en el cuerpo del bucle.Diccionario
{"tape": 8, "glue": 3}.Diccionario anidado
students["ana"]["major"] lea un campo del registro de Ana.Diccionario con valores predeterminados (defaultdict)
list inicia una lista vacía independiente cada vez que se lee por primera vez una clave de grupo nueva.Diccionario por comprensión
{word: len(word) for word in words} almacena una longitud bajo cada palabra.Diferencia
a - b contiene los miembros del conjunto izquierdo que no están en el derecho, por lo que el orden de los operandos importa.required - skills encuentra los requisitos que le faltan a la persona candidata, no sus competencias adicionales.Diferencia simétrica
E
Elemento
3 aparece una vez en set([3, 3, 5]), así que el conjunto resultante solo tiene dos miembros.Eliminación de duplicados
list(dict.fromkeys(items)) conserva los elementos aptos para hash en su orden de primera aparición.F
Filtro
if final de una comprensión decide qué entradas producen pares.if quantity > 0 excluye los productos con existencias cero al construir un diccionario nuevo.Función de creación de valores predeterminados
defaultdict llama sin argumentos para crear un valor al consultar una clave ausente.list crea una lista vacía nueva para cada clave nueva de defaultdict(list).Función zip
Fusión de diccionarios
a | b, las claves compartidas toman sus valores de b y ambas entradas permanecen sin cambios.defaults | overrides permite que un valor de sustitución reemplace al predeterminado para la misma configuración.I
Igualdad de colecciones
{"a": 1, "b": 2} sea igual a los mismos pares insertados en el orden opuesto.Informe con formato
f"{name}: {average:.1f}" para mostrar un identificador y su media redondeada.Inicialización
counts = {} dentro del bucle borraría los conteos reunidos en las iteraciones anteriores.Intersección
Intersección de vistas de claves
& a vistas de claves de diccionario y devuelve las claves presentes en ambos diccionarios sin comparar sus valores.Inversión de claves y valores
Iteración
{"west": 4, "east": 9} visita "west" y después "east", no las cantidades almacenadas.K
KeyError
stock["soap"] lanza KeyError si no existe una entrada de jabón en el diccionario de existencias.L
Lista
M
Método discard
blocked.discard(address) permite que una dirección ya esté desbloqueada sin provocar un error.Método pop
inventory.pop("pads") usa pop para recuperar la cantidad anterior mientras elimina ese producto.Método popitem
"a" y luego "b", popitem() devuelve el par de "b", aunque su valor sea menor.Método setdefault
setdefault crea una lista para una categoría nueva y conserva la lista de una categoría existente.Mutación
stock["soap"] = 6 es una mutación visible mediante cualquier otro nombre de ese diccionario.N
Normalización de texto
"Map" y "map" compartan una clave de conteo de palabras al convertir ambas a minúsculas.Número de valores distintos
len(set(items)) cuando los elementos de entrada son aptos para hash.[7, 7, 2, 7] es dos, mientras que su número total de apariciones es cuatro.O
Orden de inserción
"west" permanece antes de "east" si se añadió primero, aunque cambie su valor.P
Par clave-valor
"room": 12 asocia el nombre de campo "room" al número 12.R
Registro
S
Subconjunto
<= permite que los dos conjuntos sean iguales.required <= skills solo se cumple cuando la persona candidata tiene todas las competencias requeridas.Subconjunto propio
{2} < {2, 4} es verdadera, mientras que {2} < {2} es falsa porque los conjuntos son iguales.Superconjunto
a >= b comprueba si a contiene todos los miembros de b y permite la igualdad.skills >= required verifica si la persona candidata tiene todas las competencias requeridas.T
Tabla de frecuencias
[2, 5, 2] almacena un conteo de dos bajo 2 y de uno bajo 5.Total por categoría
Tupla
("Dune", 1965) mantiene juntos un título y su año de publicación como un par.U
Unión
morning | evening reúne a todas las personas que asisten a cualquiera de las sesiones, incluidas las que asisten a ambas.V
Valor
"scores" puede ser una lista, lo que permite que un registro contenga todas las puntuaciones de un estudiante.Valor mutable compartido
dict.fromkeys(keys, []) coloca una lista bajo todas las claves de grupo.Valor predeterminado (por defecto)
get de un diccionario.stock.get("soap", 0), el valor predeterminado es cero; la llamada no crea una entrada de jabón.Vista de diccionario
keys(), values() o items() que refleja los cambios del diccionario.stock.keys() muestra un producto nuevo después de añadirlo.Vista de pares clave-valor (items)
for city, temp in temps.items(): proporciona cada ciudad junto con su temperatura.Sobre esta unidad
Crea tus propios Materiales de Estudio
Convierte tus notas, diapositivas y documentos en Guías de Estudio, Preguntas de Práctica, Flashcards y 6 herramientas más.