{ "cells": [ { "cell_type": "markdown", "id": "35df0cae-5159-40e9-bcd6-7ceb1d6b6bfc", "metadata": { "tags": [] }, "source": [ "Diccionarios --- 11:22 min\n", "===\n", "\n", "* 11:22 min | Última modificación: Octubre 5, 2021 " ] }, { "cell_type": "markdown", "id": "47c83571-1d2e-44c6-9ae5-272652bdc339", "metadata": {}, "source": [ "Un dicionario es una estructura de datos en que cada elemento contiene una clave y un valor. Los diccionarios pueden crearse usando `{` y `}`." ] }, { "cell_type": "code", "execution_count": 1, "id": "65ea1e5e-4421-4421-b54c-8bde22f05c20", "metadata": {}, "outputs": [], "source": [ "#\n", "# Creación de un diccionario vacio\n", "#\n", "empty_dict = {}" ] }, { "cell_type": "code", "execution_count": 26, "id": "7c6e797e-7f8b-4243-9ddb-a3843d8a95e4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{}" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "empty_dict" ] }, { "cell_type": "code", "execution_count": 2, "id": "d517b0b6-c566-4e9e-8539-3f197776bd07", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Tipo\n", "#\n", "type(empty_dict)" ] }, { "cell_type": "code", "execution_count": 3, "id": "5c06a1e7-1ebe-4d3a-b49d-5b1e3aeca11d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'b': 2, 'a': 1}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Estructura de parejas clave-valor.\n", "# 'a' y 'b' son las claves y 1 y 2 son los valores.\n", "#\n", "dict_a = {\"b\": 2, \"a\": 1}\n", "dict_a" ] }, { "cell_type": "code", "execution_count": 4, "id": "81b98517-507a-4905-bbbe-02d27468a1cc", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'d': 4, 'a': 1, 'b': 2}" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Creació mediante la palabra reservada dict.\n", "# La función espera una lista de tuplas clave-valor.\n", "#\n", "dict(\n", " [\n", " (\"d\", 4),\n", " (\"a\", 1),\n", " (\"b\", 2),\n", " ]\n", ")" ] }, { "cell_type": "code", "execution_count": 5, "id": "22e9a15e-5932-4bef-899f-f0de1f633592", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'a': 1, 'b': 2, 'c': 3}" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Creación mediante el operador de asignación (=)\n", "#\n", "dict(a=1, b=2, c=3)" ] }, { "cell_type": "code", "execution_count": 6, "id": "53d18903-9d5d-4626-9167-47a4f8285fe4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'b': 2, 'a': 1, 'c': 3}" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Creación de un nuevo elemento mediante\n", "# asignación\n", "#\n", "dict_a[\"c\"] = 3\n", "dict_a" ] }, { "cell_type": "code", "execution_count": 7, "id": "f0257518-486e-4ae5-a413-72e811033c7f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Extracción de un valor a partir de su clave\n", "#\n", "dict_a[\"b\"]" ] }, { "cell_type": "code", "execution_count": 8, "id": "364a990b-3d3f-47f9-8718-12197222a7f5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'a': 1, 'c': 3}" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Borrado de un elemento del diccionario\n", "#\n", "del dict_a[\"b\"]\n", "dict_a" ] }, { "cell_type": "code", "execution_count": 9, "id": "731e9821-2a16-487e-a11b-c09bf39b40ac", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{0: [0, 1, 2], 1: [3, 4, 5], 2: [6, 7, 8]}" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Creación de un diccionario con datos complejos\n", "#\n", "complex_dict = {\n", " 0: [0, 1, 2],\n", " 1: [3, 4, 5],\n", " 2: [6, 7, 8],\n", "}\n", "\n", "complex_dict" ] }, { "cell_type": "code", "execution_count": 10, "id": "d3dc0030-b32d-4e45-ab47-073320c4683d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{(0, 0): [], (0, 1): [0, 1, 2], (1, 0): [3, 4, 5], (1, 1): [6, 7, 8]}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Las claves también pueden ser datos complejos\n", "#\n", "complex_dict = {\n", " (0, 0): [],\n", " (0, 1): [0, 1, 2],\n", " (1, 0): [3, 4, 5],\n", " (1, 1): [6, 7, 8],\n", "}\n", "\n", "complex_dict" ] }, { "cell_type": "code", "execution_count": 11, "id": "b1c98187-dfcf-4a75-89e4-73d89e967b8d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "7" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Extracción de un elemento de un valor complejo\n", "#\n", "complex_dict[(1, 1)][1]" ] }, { "cell_type": "code", "execution_count": 12, "id": "b9798c9e-35dc-4ad7-8155-122ea1e775f7", "metadata": {}, "outputs": [], "source": [ "#\n", "# Clave no existente\n", "#" ] }, { "cell_type": "code", "execution_count": null, "id": "3e9d5e94", "metadata": {}, "outputs": [], "source": [ "# Erro de clave que no existe" ] }, { "cell_type": "code", "execution_count": 13, "id": "04bc6851-b856-4d2e-b9cd-35546531cca6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['a', 'c']" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Método keys\n", "# ===============================================\n", "# No necesariamente están en orden alfabético.\n", "#\n", "list(dict_a.keys())" ] }, { "cell_type": "code", "execution_count": 14, "id": "56e97465-829a-400d-a16f-ce770b6da8c5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 3]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Método values\n", "# ===============================================\n", "#\n", "list(dict_a.values())" ] }, { "cell_type": "code", "execution_count": 15, "id": "44f33912-6d66-4583-8c3b-7c4a791578d7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_items([('a', 1), ('c', 3)])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Método items\n", "# ===============================================\n", "#\n", "dict_a.items()" ] }, { "cell_type": "code", "execution_count": 16, "id": "d6053c54-cab1-4c42-a02c-910effb0e708", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'value not found'" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Método get\n", "# ===============================================\n", "#\n", "dict_a.get(\"inexistent key\", \"value not found\")" ] }, { "cell_type": "code", "execution_count": 17, "id": "e5615246-61e5-49f2-a56f-003eb033689d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{0: 'a', 1: 'b', 2: 'CC', 3: 'DD', 4: 'EE'}" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Método update()\n", "# ===============================================\n", "#\n", "dict_a = {0: \"a\", 1: \"b\", 2: \"c\"}\n", "dict_b = {2: \"CC\", 3: \"DD\", 4: \"EE\"}\n", "dict_a.update(dict_b)\n", "dict_a" ] }, { "cell_type": "code", "execution_count": 18, "id": "1b67821e-418b-4d05-b053-7133c943f244", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{1: 'b', 2: 'c'}" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Método pop()\n", "# ===============================================\n", "#\n", "dict_a = {0: \"a\", 1: \"b\", 2: \"c\"}\n", "dict_a.pop(0)\n", "dict_a" ] }, { "cell_type": "code", "execution_count": 19, "id": "ed4bf917-a28c-4990-8a41-ae66ab8f91e8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Operador in\n", "# ===============================================\n", "# La clave está en el diccionario?\n", "#\n", "\"a\" in dict_a" ] }, { "cell_type": "code", "execution_count": 20, "id": "71e21c37-5855-481c-a927-f9a80e58d778", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# La clave no está en el diccionario?\n", "#\n", "\"a\" not in dict_a" ] }, { "cell_type": "code", "execution_count": 21, "id": "17388349-3a04-4727-84ca-3af222097659", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{0: 'a', 1: 'b', 2: 'CC', 3: 'DD', 4: 'EE'}" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Unión de diccionarios\n", "# ===============================================\n", "#\n", "dict_a = {\n", " 0: \"a\",\n", " 1: \"b\",\n", " 2: \"c\",\n", "}\n", "\n", "dict_b = {\n", " 2: \"CC\",\n", " 3: \"DD\",\n", " 4: \"EE\",\n", "}\n", "\n", "#\n", "# Note que se reemplaza el valor para la clave\n", "# 2 en dict_a\n", "#\n", "{**dict_a, **dict_b}" ] }, { "cell_type": "code", "execution_count": 22, "id": "a1e1916a-7755-4668-adff-0243c178e6af", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{2: 'c', 3: 'DD', 4: 'EE', 0: 'a', 1: 'b'}" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#\n", "# Note que se reemplaza el valor para la clave\n", "# 2 en dict_b\n", "#\n", "{**dict_b, **dict_a}" ] }, { "cell_type": "markdown", "id": "0fd13fc9-afd7-4ab9-91c3-8c8b0e379553", "metadata": {}, "source": [ "Caso de aplicación\n", "---" ] }, { "cell_type": "markdown", "id": "59e00270-7e4f-44e1-b2e4-7968675a63c0", "metadata": {}, "source": [ "Se desea crear un diccionario que contenga como clave el ranking del nombre y como valor el nombre del bebe." ] }, { "cell_type": "code", "execution_count": 23, "id": "2b18b8fd-775b-41d6-815d-b150ec8281e0", "metadata": {}, "outputs": [], "source": [ "babynames_url = (\n", " \"https://raw.githubusercontent.com/jdvelasq/datalabs/master/datasets/baby_names.csv\"\n", ")\n", "!wget --quiet {babynames_url} -P /tmp/" ] }, { "cell_type": "code", "execution_count": 24, "id": "c264f826-9d89-4342-aa69-bfa3eb170c00", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "BRITH_YEAR,GENDER,ETHNICTY,NAME,COUNT,RANK\n", "2011,FEMALE,HISPANIC,GERALDINE,13,75\n", "2011,FEMALE,HISPANIC,GIA,21,67\n", "2011,FEMALE,HISPANIC,GIANNA,49,42\n", "2011,FEMALE,HISPANIC,GISELLE,38,51\n", "2011,FEMALE,HISPANIC,GRACE,36,53\n", "2011,FEMALE,HISPANIC,GUADALUPE,26,62\n", "2011,FEMALE,HISPANIC,HAILEY,126,8\n", "2011,FEMALE,HISPANIC,HALEY,14,74\n", "2011,FEMALE,HISPANIC,HANNAH,17,71\n" ] } ], "source": [ "!head /tmp/baby_names.csv" ] }, { "cell_type": "code", "execution_count": 25, "id": "73da2151-6021-478e-aa8c-c681728dc4c6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'75': 'Shia',\n", " '67': 'Yaakov',\n", " '42': 'Jackson',\n", " '51': 'Yitzchok',\n", " '53': 'Christian',\n", " '62': 'Eliezer',\n", " '8': 'Daniel',\n", " '74': 'Oscar',\n", " '71': 'Ari',\n", " '78': 'Tyler',\n", " '73': 'Yechiel',\n", " '72': 'Edward',\n", " '77': 'Victor',\n", " '60': 'Peter',\n", " '1': 'Joseph',\n", " '70': 'Vincent',\n", " '61': 'Sean',\n", " '65': 'Zev',\n", " '58': 'Miles',\n", " '41': 'Yehuda',\n", " '76': 'Leonardo',\n", " '68': 'Yakov',\n", " '48': 'Asher',\n", " '55': 'Mark',\n", " '40': 'Owen',\n", " '66': 'Nathaniel',\n", " '64': 'Gavin',\n", " '34': 'Shimon',\n", " '44': 'Nathan',\n", " '57': 'Shmuel',\n", " '63': 'Solomon',\n", " '33': 'Eli',\n", " '31': 'Max',\n", " '20': 'Ryan',\n", " '69': 'Hunter',\n", " '35': 'Luke',\n", " '13': 'William',\n", " '52': 'George',\n", " '59': 'Shlomo',\n", " '39': 'Zachary',\n", " '9': 'Samuel',\n", " '27': 'Thomas',\n", " '10': 'Jack',\n", " '56': 'Levi',\n", " '12': 'Adam',\n", " '2': 'David',\n", " '25': 'Isaac',\n", " '18': 'Ethan',\n", " '14': 'Henry',\n", " '38': 'Andrew',\n", " '28': 'Yosef',\n", " '6': 'Benjamin',\n", " '3': 'Michael',\n", " '19': 'Liam',\n", " '45': 'Aiden',\n", " '47': 'Jonathan',\n", " '11': 'James',\n", " '79': 'Wyatt',\n", " '17': 'John',\n", " '43': 'Yisroel',\n", " '80': 'Sam',\n", " '37': 'Mordechai',\n", " '81': 'Shaya',\n", " '46': 'Christopher',\n", " '5': 'Jacob',\n", " '22': 'Matthew',\n", " '50': 'Robert',\n", " '21': 'Noah',\n", " '30': 'Oliver',\n", " '24': 'Theodore',\n", " '54': 'Aron',\n", " '15': 'Abraham',\n", " '36': 'Mason',\n", " '23': 'Chaim',\n", " '7': 'Alexander',\n", " '16': 'Nicholas',\n", " '49': 'Logan',\n", " '29': 'Anthony',\n", " '4': 'Moshe',\n", " '32': 'Gabriel',\n", " '26': 'Lucas',\n", " '92': 'Usher',\n", " '90': 'Naftali',\n", " '82': 'Ian',\n", " '91': 'Ronan',\n", " '88': 'Youssef',\n", " '89': 'Simcha',\n", " '94': 'Yousef',\n", " '83': 'Raphael',\n", " '93': 'Shmiel',\n", " '84': 'Philip',\n", " '87': 'Xavier',\n", " '85': 'Timothy',\n", " '86': 'Yehoshua',\n", " '96': 'Yusuf',\n", " '97': 'Yossi',\n", " '95': 'Naftuli',\n", " '99': 'Shea',\n", " '98': 'Yisrael',\n", " '100': 'Yoel',\n", " '101': 'Yahya',\n", " '102': 'Yidel'}" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import csv\n", "\n", "csvfile = open(\"/tmp/baby_names.csv\", \"r\")\n", "\n", "#\n", "# Crea un diccionario vacio para almacenar\n", "# los datos\n", "#\n", "baby_names = {}\n", "\n", "#\n", "# Descarta la primera fila\n", "#\n", "next(csvfile)\n", "\n", "#\n", "# Itera sobre las filas del archivo\n", "#\n", "for row in csv.reader(csvfile):\n", " baby_names[row[5]] = row[3]\n", "\n", "#\n", "# imprime el ranking\n", "#\n", "# print(baby_names.keys())\n", "baby_names" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" } }, "nbformat": 4, "nbformat_minor": 5 }