Diccionarios
Buscar una clave que no está en un diccionario detiene el programa con KeyError, pero d.get(key, 0) devuelve 0 en su lugar.
Seoyeon tiene 12 papeletas y tres candidatos
Esa tabla es un diccionario. Un diccionario guarda pares: una clave y el valor que le corresponde. Se escribe entre llaves, con dos puntos entre cada clave y su valor. Para leer un valor, pon la clave entre corchetes, igual que pondrías un índice después de una lista. Para agregar un par o cambiar uno, asigna a esa clave.
votes = {"Ari": 0, "Bo": 0, "Cy": 0}
votes["Bo"] = votes["Bo"] + 1
votes["Ari"] += 1
votes["Bo"] += 1
print(votes)
print(votes["Bo"]){'Ari': 1, 'Bo': 2, 'Cy': 0}
2Contar toda la caja en un solo bucle
Escribir una línea por papeleta no es mejor que las marcas. Seoyeon pone las papeletas en una lista y la recorre con un bucle. Hay un inconveniente: ¿qué pasa si una papeleta nombra a alguien que no preparó de antemano, o si prefiere no listar primero a los candidatos? Leer una clave que no existe con corchetes detiene el programa. El método get(key, default) lo resuelve. Devuelve el valor si la clave está y el valor predeterminado si no, así que votes.get(name, 0) + 1 funciona para el primer voto y para todos los siguientes.
ballots = ["Bo", "Ari", "Bo", "Cy", "Bo", "Ari",
"Cy", "Bo", "Ari", "Bo", "Cy", "Bo"]
votes = {}
for name in ballots:
votes[name] = votes.get(name, 0) + 1
print(votes)
print(len(ballots), sum(votes.values())){'Bo': 6, 'Ari': 3, 'Cy': 3}
12 12La última línea es la comprobación de Seoyeon. Entraron doce papeletas y los recuentos suman doce, así que no se perdió ninguna. Fíjate en el orden de los nombres en la salida: Bo primero, porque Bo fue el primer nombre que encontró el bucle. Desde Python 3.7, un diccionario conserva sus claves en el orden en que se agregaron por primera vez, y la sección del tutorial sobre diccionarios dice lo mismo.
Recorrer claves y valores juntos
Un bucle for sobre un diccionario da las claves. items() da la clave y el valor juntos, que es lo que quieres para una tabla de resultados. in comprueba si existe una clave, y max() con key=votes.get encuentra la clave con el valor más grande. Este último es un patrón que vale la pena copiar tal cual, incluso antes de entender cada parte.
votes = {"Bo": 6, "Ari": 3, "Cy": 3}
for name, n in votes.items():
print(name, "#" * n, n)
print("Dan" in votes)
print(max(votes, key=votes.get))Bo ###### 6
Ari ### 3
Cy ### 3
False
BoLos diccionarios aparecen donde los datos vienen en pares de nombre y valor: una palabra y su significado, una estación de metro y su número de línea, un número de alumno y un nombre. Las claves deben ser únicas, y asignar a una clave existente reemplaza su valor anterior en lugar de agregar una segunda copia.
| diccionario | Pares clave: valor entre { } |
| clave | El nombre con el que buscas un valor; las claves son únicas |
| d[key] | Lee el valor; KeyError si falta la clave |
| d.get(key, default) | Lee el valor, o da el valor predeterminado si falta la clave |
| d.items() | Pares de clave y valor para un bucle for |
| key in d | True si el diccionario tiene esa clave |
- ¿Qué imprime esto?
price = {"gimbap": 3500, "ramen": 4500} print(price["ramen"]) - ¿Qué imprime esto?
price = {"gimbap": 3500} price["tteokbokki"] = 5000 print(len(price)) - ¿Qué imprime esto?
price = {"gimbap": 3500} price["gimbap"] = 4000 print(price) - ¿Qué imprime esto?
stock = {"pens": 4} print(stock.get("pens", 0), stock.get("tape", 0)) - ¿Qué pasa al ejecutar esto?
stock = {"pens": 4} print(stock["tape"])- Imprime 0
- Imprime None
- Imprime tape
- Se detiene con KeyError: 'tape'
- ¿Qué imprime esto?
counts = {} for ch in "hello": counts[ch] = counts.get(ch, 0) + 1 print(counts["l"]) - ¿Qué imprime esto?
ages = {"Mina": 14, "Jun": 13} print("Jun" in ages, 14 in ages) - ¿Qué imprime esto?
d = {"b": 2, "a": 1} for k in d: print(k)a
bb
a2
1b 2
a 1
- ¿Qué imprime esto?
scores = {"Ari": 3, "Bo": 6, "Cy": 3} print(max(scores, key=scores.get)) - ¿Qué imprime esto?
d = {"x": 1, "y": 2} total = 0 for k, v in d.items(): total += v print(total)
- «votes["Dan"] da 0 si Dan no obtuvo votos». Si "Dan" nunca se agregó como clave, la búsqueda se detiene con KeyError: 'Dan'. Usa votes.get("Dan", 0) cuando una clave pueda faltar.
- «14 in ages comprueba si alguien tiene 14 años». in mira las claves, no los valores. Para buscar entre los valores, escribe 14 in ages.values().
- «Los diccionarios tienen posiciones como las listas, así que votes[0] es el primer candidato». Un diccionario se consulta por clave, no por posición. votes[0] busca una clave igual a 0 y da KeyError: 0.
- Un diccionario guarda pares clave: valor entre { }.
- d[key] lee un valor; una clave que falta da KeyError.
- d.get(key, default) evita el KeyError.
- counts[x] = counts.get(x, 0) + 1 es el patrón de conteo.
- for k, v in d.items(): recorre los pares en el orden en que se agregaron.
Fuentes de este curso (6)
- Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
- Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
- Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
- General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
- Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
- Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)
Fecha de consulta: 2026-10-19