Diccionario en python, con ejemplos


El proyecto de este post lo puedes descargar pulsando AQUI.

Los diccionarios en Python son un tipo de estructuras de datos que permite guardar un conjunto no ordenado de pares clave-valor, siendo las claves únicas dentro de un mismo diccionario (es decir que no pueden existir dos elementos con una misma clave). Los diccionarios son estructuras de datos muy extendidos en otros lenguajes de programación, aunque en otros lenguajes como java se les denominan con distintos nombres como "Map" (ver entrada "Map en Java, con ejemplos").

Veamos a continuación un ejemplo de como declarariamos un diccionario en Python en cuyos elementos tenemos los jugadores de la selección Española, siendo la clave su dorsal (clave única) y el valor su nombre.

# Defino la varible 'futbolistas' como un diccionario. No es necesario declarar que tipo de dato es
futbolistas = dict()

futbolistas = {
    1 : "Casillas", 15 : "Ramos",
    3 : "Pique", 5 : "Puyol",
    11 : "Capdevila", 14 : "Xabi Alonso",
    16 : "Busquets", 8 : "Xavi Hernandez",
    18 : "Pedrito", 6 : "Iniesta",
    7 : "Villa"
}

Como vemos el diccionario de declara entre los caracteres '{}' y cada uno de los elementos los separamos por comas (','). Cada elemento lo definimos con su par clave:valor, pudiendo der la clave y el valor de cualquier tipo de dato (‘int’, ‘float’, ‘chr’, ‘str’, ‘bool’, ‘object’).

Vamos a continuación a recorrer el diccionario (con un foreach) y a imprimir sus pares clave:valor (más adelante veremos todos los métodos de los diccionarios) :

# Recorrer un diccionario, imprimiendo su clave-valor
for k,v in futbolistas.items():
    print "%s -> %s" %(k,v)

Como resultado de este código tenemos lo siguiente:

1 -> Casillas
3 -> Pique
5 -> Puyol
6 -> Iniesta
7 -> Villa
8 -> Xavi Hernandez
11 -> Capdevila
14 -> Xabi Alonso
15 -> Ramos
16 -> Busquets
18 -> Pedrito

Vamos a pasar ahora a mostrar los métodos (o funciones) para trabajar con los diccionarios en Python, y posteriormente a poner ejemplos del funcionamiento de estos métodos:

# Declaración de un diccionario
diccionario = dict()

# Devuelve el numero de elementos que tiene el diccionario
len(dict)

# Compara el número de elementos distintos que tienen los dos 
cmp (dict1,dict2)

# Devuelve una lista con las claves del diccionario
dict.keys()

# Devuelve una lista con los valores del diccionario
dict.values()

# Devuelve el valor del elemento con clave key. Sino devuelve default
dict.get(key, default=None)

# Inserta un elemento en el diccionario clave:valor. Si la clave existe no lo inserta
dict.setdefault(key, default=None)

# Insertamos un elemento en el diccionario con su clave:valor
dict['key'] = 'value'

# Eliminamos el elemento del diccionario con clave key
dict.pop('key',None)

# Devuleve la copia de un diccionario dict2 = dict.copy()
dict.copy()

# Elimina todos los elementos de un diccionario
dict.clear()

# Crea un nuevo diccionario poniendo como claves las que hay en la lista y los valores por defecto si se les pasa
dict.fromkeys(list, defaultValue)

# Devuelve true si existe la clave. Sino devuelve false
dict.has_key(key)

# devuelve un lista de tuplas formadas por los pares clave:valor
dict.items()

# Añade los elementos de un diccionario a otro
dict.update(dict2)

Una vez vistos los métodos (o funciones) que nos permiten trabajar con los diccionarios, vamos a mostrar como trabajar con estos métodos. Para ello nos vamos a utilizar el diccionario 'futbolistas' que hemos declarado al principio, en el que hemos guardado elementos futbolista te tienen como clave su dorsal (es decir un 'int') y como valor su nombre (un 'string').

En primer lugar vamos a mostrar como contar los elementos de un diccionario, que lo hacemos de la siguiente forma

# Vemos cuantos elementos tiene nuestro diccionario
numElem = len(futbolistas)
print "\nNumero de elementos del diccionario len(futbolistas) = %i" %numElem

Teniendo como salida de ese fragmento de código:

Numero de elementos del diccionario len(futbolistas) = 11

Con el método “keys()” obtenemos una lista con las claves de los diccionarios y de la misma forma con el método “values()” obtenemos una lista con los valores del diccionario. En el siguiente fragmento de código vemos como obtener estas listas:

# Imprimimos una lista con las claves del diccionario
keys = futbolistas.keys();
print "\nClaves del diccionario futbolistas.keys(): \n%s" %keys

# Imprimimos en una lista los valores del diccionario
values = futbolistas.values()
print "\nValores del diccionario futbolistas.values(): \n%s" %values

Como salida de este fragmento de código tenemos lo siguiente:

Claves del diccionario futbolistas.keys(): 
[1, 3, 5, 6, 7, 8, 11, 14, 15, 16, 18]

Valores del diccionario futbolistas.values(): 
['Casillas', 'Pique', 'Puyol', 'Iniesta', 'Villa', 'Xavi Hernandez', 'Capdevila', 'Xabi Alonso', 'Ramos', 'Busquets', 'Pedrito']

Con el método “get(key)”, pasándole como parámetro una clave, obtenemos el valor del elemento que tiene esa clave:

# Obtenemos el valor de un elemento dada su clave
elem = futbolistas.get(6)
print "\nObtenemos el valor cuya clave es '6' futbolistas.get(6): %s" %elem

Como resultado, obtenemos el nombre del futbolista con clave = 6:

Obtenemos el valor cuya clave es '6' futbolistas.get(6): Iniesta

A continuación vamos a ver dos formas de insertar elementos en el diccionario. La primera de ellas es la más sencilla (como si de un array asociativo se tratase), pasándole la clave entre corchetes y asignándole un valor:

# Añadimos un nuevo elemento a la lista
futbolistas[22] = 'Navas'
print "\nDiccionario tras añadir un elemento: futbolistas[22] = 'Navas' \n%s" %futbolistas

Como resultado, tenemos en el diccionario un elemento más:

Diccionario tras añadir un elemento: futbolistas[22] = 'Navas' 
{1: 'Casillas', 3: 'Pique', 5: 'Puyol', 6: 'Iniesta', 7: 'Villa', 8: 'Xavi Hernandez', 10: 'Cesc', 11: 'Capdevila', 14: 'Xabi Alonso', 15: 'Ramos', 16: 'Busquets', 18: 'Pedrito', 22: 'Navas'}

La segunda forma de insertar un elemento es con el método “setdefault(key,default=valor)” al que se le pasa como parámetros un clave y un valor. Este método tiene la peculiaridad de que solo inserta el elemento en el diccionario sino existe un elemento con esa clave. Si existe un elemento con esa clave no realiza la inserción:

# Insertamos un elemento en el array. Si la clave ya existe no inserta el elemento
elem2 = futbolistas.setdefault(10,'Cesc')
print "\nInsertamos un elemento en el diccionario. Si la clave existe no lo inserta" \
      "\nfutbolistas.setdefault(10,'Cesc'): %s" %elem2

Como resultado al fragmento de código anterior tenemos lo siguiente:

Insertamos un elemento en el diccionario. Si la clave existe no lo inserta
futbolistas.setdefault(10,'Cesc'): Cesc

El siguiente método que vamos a ver “pop(key)” nos borrará del diccionario aquel elemento que tenga como clave, la que le pasamos como parámetro. Por ejemplo vamos a borrar el elemento con clave = 22:

# Eliminamos un elemento del diccionario dada su clave
futbolistas.pop(22)
print "\nDiccionario tras eliminar un elemento: futbolistas.pop(22) \n%s" %futbolistas

Como resultado de este fragmento de código, podemos observar que efectivamente ha realizado el borrado del elemento con clave = 22:

Diccionario tras eliminar un elemento: futbolistas.pop(22) 
{1: 'Casillas', 3: 'Pique', 5: 'Puyol', 6: 'Iniesta', 7: 'Villa', 8: 'Xavi Hernandez', 10: 'Cesc', 11: 'Capdevila', 14: 'Xabi Alonso', 15: 'Ramos', 16: 'Busquets', 18: 'Pedrito'}

Para hacer una copia de un diccionario, se utiliza el método “copy()”:

# Hacemos una copia del diccionario
futbolistasCopy = futbolistas.copy();
print "\nRealizamos una copia del diccionario futbolistasCopy=futbolistas.copy(): \n%s" %futbolistas

Vamos a ver que como resultado, tenemos un nuevo diccionario llamado ‘futbolistasCopy’ que contiene los mismos elementos que el diccionario ‘futbolistas’:

Realizamos una copia del diccionario futbolistasCopy=futbolistas.copy(): 
{1: 'Casillas', 3: 'Pique', 5: 'Puyol', 6: 'Iniesta', 7: 'Villa', 8: 'Xavi Hernandez', 10: 'Cesc', 11: 'Capdevila', 14: 'Xabi Alonso', 15: 'Ramos', 16: 'Busquets', 18: 'Pedrito'}

Para eliminar el contenido (o los elementos) de un diccionario utilizamos el método “clear()”:

# Eliminamos los elementos de un diccionario
futbolistasCopy.clear()
print "\nEliminamos los elementos de un diccionario futbolistasCopy.clear(): %s" %futbolistasCopy

Vemos como con el fragmento de código anterior nos elimina el contenido del diccionario, pero no elimina el diccionario:

Eliminamos los elementos de un diccionario futbolistasCopy.clear(): {}

Con el método “fromkeys(listKey,default=value)”, creamos un diccionario cuyas claves son las que le pasamos como parámetro en una lista. Si le pasamos un segundo parámetro, pondrá ese parámetro como clave de cada uno de los elementos. Veamos un ejemplo:

# Creamos un diccionario a partir de una lista con las claves
keys = ['nombre', 'apellidos', 'edad']
dictList = dict.fromkeys(keys, 'nada')
print "\nCreamos un diccionario a partir de una lista dictList = dict.fromkeys(keys, 'nada'): \n%s" %dictList

Como resultado, nos crea un diccionario llamado ‘dictList’, con las claves que le pasamos en la lista y con el valor ‘nada’ que le pasamos como parámetro:

Creamos un diccionario a partir de una lista dictList = dict.fromkeys(keys, 'nada'): 
{'apellidos': 'nada', 'nombre': 'nada', 'edad': 'nada'}

El método que nos permite comprobar si existe o no una clave es el método “has_key(key)”. Veamos un ejemplo:

# Comprobamos si existe o no una clave
exit2 = futbolistas.has_key(2)
exit8 = futbolistas.has_key(8)
print "\nComprobamos si existen los elementos 2 y 8 \n\tfutbolistas.has_key(2) = %s " \
      "\n\tfutbolistas.has_key(8) = %s" %(exit2,exit8)

Como resultado de la comprobación de claves anterior tenemos lo siguiente:

Comprobamos si existen los elementos 2 y 8 
	futbolistas.has_key(2) = False 
	futbolistas.has_key(8) = True

Otro método muy util; sobre todo para hacer un foreach del diccionario y obtener sus pares clave:valor, es el método “items()” que devuelve los elementos de los diccionarios en tuplas, en la que en cada una de ellas esta en la primera posición la clave y en la segunda el valor. Veamos un ejemplo:

# Devolvemos los elementos del diccionario en tuplas
tuplas = futbolistas.items()
print "\nPasamos el diccionario a tuplas con clave-valor: tuplas = futbolistas.items() \n%s" %tuplas

Como resultado vemos que efectivamente nos devuelve una lista de tuplas con los pares clave:valor:

Pasamos el diccionario a tuplas con clave-valor: tuplas = futbolistas.items() 
[(1, 'Casillas'), (3, 'Pique'), (5, 'Puyol'), (6, 'Iniesta'), (7, 'Villa'), (8, 'Xavi Hernandez'), (10, 'Cesc'), (11, 'Capdevila'), (14, 'Xabi Alonso'), (15, 'Ramos'), (16, 'Busquets'), (18, 'Pedrito')]

Por último vamos a ver el método “update(dict)” que nos va a permitir unir los elementos de dos diccionarios. Este método inserta en el diccionario aquellos elementos del diccionario que se le pasa como parámetro, cuyas claves no estén en el diccionario. Veamos el siguiente ejemplo:

# Mergeamos dos diccionarios
suplentes = {
    4:'Marchena', 9:'Torres', 12:'Valdes',
    13:'Mata' , 17:'Arbeloa', 19:'Llorente',
    20:'Javi Martinez', 21:'Silva', 23:'Reina'
}

futbolistas.update(suplentes)
print "\nAñadimos los elementos de un diccionario a otro futbolistas.update(suplentes): \n%s" %futbolistas

Como vemos en este ejemplo nos hemos creado un nuevo diccionario con los futbolistas ‘suplentes’ y lo hemos unido al diccionario futbolistas. De esta forma el diccionario ‘futbolistas’ ya tiene todos los futbolistas (titulares+suplentes) de la selección Española campeona del mundo en el año 2010. Como resultado tenemos lo siguiente:

Añadimos los elementos de un diccionario a otro futbolistas.update(suplentes): 
{1: 'Casillas', 3: 'Pique', 4: 'Marchena', 5: 'Puyol', 6: 'Iniesta', 7: 'Villa', 8: 'Xavi Hernandez', 9: 'Torres', 10: 'Cesc', 11: 'Capdevila', 12: 'Valdes', 13: 'Mata', 14: 'Xabi Alonso', 15: 'Ramos', 16: 'Busquets', 17: 'Arbeloa', 18: 'Pedrito', 19: 'Llorente', 20: 'Javi Martinez', 21: 'Silva', 23: 'Reina'}

Estos han sido los métodos más importantes para el manejo de diccionarios en python. A continuación mostramos todo el fragmento del código que hemos ido desgranando en este tutorial:

# -*- coding: utf-8 -*-
__author__ = 'Richard'

# Defino la varible 'futbolistas' como un diccionario. No es necesario declarar que tipo de dato es
futbolistas = dict()

futbolistas = {
    1 : "Casillas", 15 : "Ramos",
    3 : "Pique", 5 : "Puyol",
    11 : "Capdevila", 14 : "Xabi Alonso",
    16 : "Busquets", 8 : "Xavi Hernandez",
    18 : "Pedrito", 6 : "Iniesta",
    7 : "Villa"
}

# Recorrer un diccionario, imprimiendo su clave-valor
for k,v in futbolistas.items():
    print "%s -> %s" %(k,v)

# Vemos cuantos elementos tiene nuestro diccionario
numElem = len(futbolistas)
print "\nNumero de elementos del diccionario len(futbolistas) = %i" %numElem

# Imprimimos una lista con las claves del diccionario
keys = futbolistas.keys();
print "\nClaves del diccionario futbolistas.keys(): \n%s" %keys

# Imprimimos en una lista los valores del diccionario
values = futbolistas.values()
print "\nValores del diccionario futbolistas.values(): \n%s" %values

# Obtenemos el valor de un elemento dada su clave
elem = futbolistas.get(6)
print "\nObtenemos el valor cuya clave es '6' futbolistas.get(6): %s" %elem

# Insertamos un elemento en el array. Si la clave ya existe no inserta el elemento
elem2 = futbolistas.setdefault(10,'Cesc')
print "\nInsertamos un elemento en el diccionario. Si la clave existe no lo inserta" \
      "\nfutbolistas.setdefault(10,'Cesc'): %s" %elem2

# Añadimos un nuevo elemento a la lista
futbolistas[22] = 'Navas'
print "\nDiccionario tras añadir un elemento: futbolistas[22] = 'Navas' \n%s" %futbolistas

# Eliminamos un elemento del diccionario dada su clave
futbolistas.pop(22)
print "\nDiccionario tras eliminar un elemento: futbolistas.pop(22) \n%s" %futbolistas

# Hacemos una copia del diccionario
futbolistasCopy = futbolistas.copy();
print "\nRealizamos una copia del diccionario futbolistasCopy=futbolistas.copy(): \n%s" %futbolistas

# Eliminamos los elementos de un diccionario
futbolistasCopy.clear()
print "\nEliminamos los elementos de un diccionario futbolistasCopy.clear(): %s" %futbolistasCopy

# Creamos un diccionario a partir de una lista con las claves
keys = ['nombre', 'apellidos', 'edad']
dictList = dict.fromkeys(keys, 'nada')
print "\nCreamos un diccionario a partir de una lista dictList = dict.fromkeys(keys, 'nada'): \n%s" %dictList

# Comprobamos si existe o no una clave
exit2 = futbolistas.has_key(2)
exit8 = futbolistas.has_key(8)
print "\nComprobamos si existen los elementos 2 y 8 \n\tfutbolistas.has_key(2) = %s " \
      "\n\tfutbolistas.has_key(8) = %s" %(exit2,exit8)

# Devolvemos los elementos del diccionario en tuplas
tuplas = futbolistas.items()
print "\nPasamos el diccionario a tuplas con clave-valor: tuplas = futbolistas.items() \n%s" %tuplas

# Mergeamos dos diccionarios
suplentes = {
    4:'Marchena', 9:'Torres', 12:'Valdes',
    13:'Mata' , 17:'Arbeloa', 19:'Llorente',
    20:'Javi Martinez', 21:'Silva', 23:'Reina'
}

futbolistas.update(suplentes)
print "\nAñadimos los elementos de un diccionario a otro futbolistas.update(suplentes): \n%s" %futbolistas
Comparte esta entrada en:
Safe Creative #1401310112503
Diccionario en python, con ejemplos por "www.jarroba.com" esta bajo una licencia Creative Commons
Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License.
Creado a partir de la obra en www.jarroba.com

2 comentarios en “Diccionario en python, con ejemplos”

  1. Buenas noches, quisiera saber como genero un reporte (.txt) a partir de una lista incluida en un diccionario. Muchas gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies

ACEPTAR