Diccionarios — 11:22 min
11:22 min | Última modificación: Octubre 5, 2021
Un dicionario es una estructura de datos en que cada elemento contiene una clave y un valor. Los diccionarios pueden crearse usando {
y }
.
[1]:
#
# Creación de un diccionario vacio
#
empty_dict = {}
[26]:
empty_dict
[26]:
{}
[2]:
#
# Tipo
#
type(empty_dict)
[2]:
dict
[3]:
#
# Estructura de parejas clave-valor.
# 'a' y 'b' son las claves y 1 y 2 son los valores.
#
dict_a = {"b": 2, "a": 1}
dict_a
[3]:
{'b': 2, 'a': 1}
[4]:
#
# Creació mediante la palabra reservada dict.
# La función espera una lista de tuplas clave-valor.
#
dict(
[
("d", 4),
("a", 1),
("b", 2),
]
)
[4]:
{'d': 4, 'a': 1, 'b': 2}
[5]:
#
# Creación mediante el operador de asignación (=)
#
dict(a=1, b=2, c=3)
[5]:
{'a': 1, 'b': 2, 'c': 3}
[6]:
#
# Creación de un nuevo elemento mediante
# asignación
#
dict_a["c"] = 3
dict_a
[6]:
{'b': 2, 'a': 1, 'c': 3}
[7]:
#
# Extracción de un valor a partir de su clave
#
dict_a["b"]
[7]:
2
[8]:
#
# Borrado de un elemento del diccionario
#
del dict_a["b"]
dict_a
[8]:
{'a': 1, 'c': 3}
[9]:
#
# Creación de un diccionario con datos complejos
#
complex_dict = {
0: [0, 1, 2],
1: [3, 4, 5],
2: [6, 7, 8],
}
complex_dict
[9]:
{0: [0, 1, 2], 1: [3, 4, 5], 2: [6, 7, 8]}
[10]:
#
# Las claves también pueden ser datos complejos
#
complex_dict = {
(0, 0): [],
(0, 1): [0, 1, 2],
(1, 0): [3, 4, 5],
(1, 1): [6, 7, 8],
}
complex_dict
[10]:
{(0, 0): [], (0, 1): [0, 1, 2], (1, 0): [3, 4, 5], (1, 1): [6, 7, 8]}
[11]:
#
# Extracción de un elemento de un valor complejo
#
complex_dict[(1, 1)][1]
[11]:
7
[12]:
#
# Clave no existente
#
[ ]:
# Erro de clave que no existe
[13]:
#
# Método keys
# ===============================================
# No necesariamente están en orden alfabético.
#
list(dict_a.keys())
[13]:
['a', 'c']
[14]:
#
# Método values
# ===============================================
#
list(dict_a.values())
[14]:
[1, 3]
[15]:
#
# Método items
# ===============================================
#
dict_a.items()
[15]:
dict_items([('a', 1), ('c', 3)])
[16]:
#
# Método get
# ===============================================
#
dict_a.get("inexistent key", "value not found")
[16]:
'value not found'
[17]:
#
# Método update()
# ===============================================
#
dict_a = {0: "a", 1: "b", 2: "c"}
dict_b = {2: "CC", 3: "DD", 4: "EE"}
dict_a.update(dict_b)
dict_a
[17]:
{0: 'a', 1: 'b', 2: 'CC', 3: 'DD', 4: 'EE'}
[18]:
#
# Método pop()
# ===============================================
#
dict_a = {0: "a", 1: "b", 2: "c"}
dict_a.pop(0)
dict_a
[18]:
{1: 'b', 2: 'c'}
[19]:
#
# Operador in
# ===============================================
# La clave está en el diccionario?
#
"a" in dict_a
[19]:
False
[20]:
#
# La clave no está en el diccionario?
#
"a" not in dict_a
[20]:
True
[21]:
#
# Unión de diccionarios
# ===============================================
#
dict_a = {
0: "a",
1: "b",
2: "c",
}
dict_b = {
2: "CC",
3: "DD",
4: "EE",
}
#
# Note que se reemplaza el valor para la clave
# 2 en dict_a
#
{**dict_a, **dict_b}
[21]:
{0: 'a', 1: 'b', 2: 'CC', 3: 'DD', 4: 'EE'}
[22]:
#
# Note que se reemplaza el valor para la clave
# 2 en dict_b
#
{**dict_b, **dict_a}
[22]:
{2: 'c', 3: 'DD', 4: 'EE', 0: 'a', 1: 'b'}
Caso de aplicación
Se desea crear un diccionario que contenga como clave el ranking del nombre y como valor el nombre del bebe.
[23]:
babynames_url = (
"https://raw.githubusercontent.com/jdvelasq/datalabs/master/datasets/baby_names.csv"
)
!wget --quiet {babynames_url} -P /tmp/
[24]:
!head /tmp/baby_names.csv
BRITH_YEAR,GENDER,ETHNICTY,NAME,COUNT,RANK
2011,FEMALE,HISPANIC,GERALDINE,13,75
2011,FEMALE,HISPANIC,GIA,21,67
2011,FEMALE,HISPANIC,GIANNA,49,42
2011,FEMALE,HISPANIC,GISELLE,38,51
2011,FEMALE,HISPANIC,GRACE,36,53
2011,FEMALE,HISPANIC,GUADALUPE,26,62
2011,FEMALE,HISPANIC,HAILEY,126,8
2011,FEMALE,HISPANIC,HALEY,14,74
2011,FEMALE,HISPANIC,HANNAH,17,71
[25]:
import csv
csvfile = open("/tmp/baby_names.csv", "r")
#
# Crea un diccionario vacio para almacenar
# los datos
#
baby_names = {}
#
# Descarta la primera fila
#
next(csvfile)
#
# Itera sobre las filas del archivo
#
for row in csv.reader(csvfile):
baby_names[row[5]] = row[3]
#
# imprime el ranking
#
# print(baby_names.keys())
baby_names
[25]:
{'75': 'Shia',
'67': 'Yaakov',
'42': 'Jackson',
'51': 'Yitzchok',
'53': 'Christian',
'62': 'Eliezer',
'8': 'Daniel',
'74': 'Oscar',
'71': 'Ari',
'78': 'Tyler',
'73': 'Yechiel',
'72': 'Edward',
'77': 'Victor',
'60': 'Peter',
'1': 'Joseph',
'70': 'Vincent',
'61': 'Sean',
'65': 'Zev',
'58': 'Miles',
'41': 'Yehuda',
'76': 'Leonardo',
'68': 'Yakov',
'48': 'Asher',
'55': 'Mark',
'40': 'Owen',
'66': 'Nathaniel',
'64': 'Gavin',
'34': 'Shimon',
'44': 'Nathan',
'57': 'Shmuel',
'63': 'Solomon',
'33': 'Eli',
'31': 'Max',
'20': 'Ryan',
'69': 'Hunter',
'35': 'Luke',
'13': 'William',
'52': 'George',
'59': 'Shlomo',
'39': 'Zachary',
'9': 'Samuel',
'27': 'Thomas',
'10': 'Jack',
'56': 'Levi',
'12': 'Adam',
'2': 'David',
'25': 'Isaac',
'18': 'Ethan',
'14': 'Henry',
'38': 'Andrew',
'28': 'Yosef',
'6': 'Benjamin',
'3': 'Michael',
'19': 'Liam',
'45': 'Aiden',
'47': 'Jonathan',
'11': 'James',
'79': 'Wyatt',
'17': 'John',
'43': 'Yisroel',
'80': 'Sam',
'37': 'Mordechai',
'81': 'Shaya',
'46': 'Christopher',
'5': 'Jacob',
'22': 'Matthew',
'50': 'Robert',
'21': 'Noah',
'30': 'Oliver',
'24': 'Theodore',
'54': 'Aron',
'15': 'Abraham',
'36': 'Mason',
'23': 'Chaim',
'7': 'Alexander',
'16': 'Nicholas',
'49': 'Logan',
'29': 'Anthony',
'4': 'Moshe',
'32': 'Gabriel',
'26': 'Lucas',
'92': 'Usher',
'90': 'Naftali',
'82': 'Ian',
'91': 'Ronan',
'88': 'Youssef',
'89': 'Simcha',
'94': 'Yousef',
'83': 'Raphael',
'93': 'Shmiel',
'84': 'Philip',
'87': 'Xavier',
'85': 'Timothy',
'86': 'Yehoshua',
'96': 'Yusuf',
'97': 'Yossi',
'95': 'Naftuli',
'99': 'Shea',
'98': 'Yisrael',
'100': 'Yoel',
'101': 'Yahya',
'102': 'Yidel'}