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'}