Skip to content

Diccionarios

Definición

Los diccionarios, también llamados matrices asociativas, deben su nombre a que son colecciones que relacionan una clave y un valor. Por ejemplo, veamos un diccionario de películas y directores:

d = {
  Love Actually : Richard Curtis,
  Kill Bill: Tarantino,
  Amélie: Jean-Pierre Jeunet
  }

El primer valor se trata de la clave y el segundo del valor asociado a la clave. Como clave podemos utilizar cualquier valor inmutable: podríamos usar números, cadenas, booleanos, tuplas, ... pero no listas o diccionarios, dado que son mutables. Esto es así porque los diccionarios se implementan como tablas hash, y a la hora de introducir un nuevo par clave-valor en el diccionario se calcula el hash de la clave para después poder encontrar la entrada correspondiente rápidamente. Si se modificara el objeto clave después de haber sido introducido en el diccionario, evidentemente, su hash también cambiaría y no podría ser encontrado.

La diferencia principal entre los diccionarios y las listas o las tuplas es que a los valores almacenados en un diccionario se les accede no por su índice, porque de hecho no tienen orden, sino por su clave, utilizando de nuevo el operador [].

d["Love Actually"] # devuelve "Richard Curtis"

Al igual que en listas y tuplas también se puede utilizar este operador para reasignar valores.

d["Kill Bill"] = "Quentin Tarantino"

Ejemplo:

dictConElementos = {'nombre': 'Jaider Quintero', 'cargo': 'Docente', 'salario': 1500000}
print(dictConElementos['nombre'])

Usted puede acceder a los valores del diccionario usando cada su clave, se presenta unos ejemplos a continuación:

print(diccionario['nombre'])
print(diccionario['cargo'])
print(diccionario['salario'])


print(type(diccionario['nombre']))
print(type(diccionario['cargo']))
print(type(diccionario['salario']))

Asignar valor a clave

Esta operación le permite asignar el valor especifico del diccionario mediante su clave.

dictConElementos = {'nombre': 'Jaider Quintero', 'cargo': 'Docente', 'salario': 1500000}

print(dictConElementos['nombre'])
dictConElementos['nombre'] = "Jaider Jose"
print(dictConElementos['nombre'])

Iteración in

Este operador es el mismo operador integrado in en el interprete Python pero aplicada al uso de la secuencia de tipo diccionario.

dictConElementos = {'nombre': 'Jaider Quintero', 'cargo': 'Docente', 'salario': 1500000}
print (dictConElementos)

if ('nombre' in dictConElementos):
    print("True")
else: print("False")

if ('apellidos' in dictConElementos):
    print("True")
else: print("False")

En el ejemplo anterior este operador devuelve True si la clave esta en el diccionario dictConElementos, de lo contrario devuelve False.

Otro ejemplo: Capturar los elementos mediante una entrada guiada por el usuario:

dictConElementos = {

}

n = input("Ingrese el Nombre => ")
c = input("Ingrese el Cargo => ")
s = int(input("Ingrese el Salario => "))
dictConElementos['nombre'] = n
dictConElementos['cargo'] = c
dictConElementos['salario'] = s

for (clave, valor) in dictConElementos.items():
    print(clave, valor)

Métodos

Los objetos de tipo diccionario integra una serie de métodos integrados a continuación:

Clear()

Este método remueve todos los elementos desde el diccionario.

dictConElementos = {'nombre': 'Jaider Quintero', 'cargo': 'Docente', 'salario': 1500000}
print (dictConElementos)

print (dictConElementos)

El diccionario debe estar vacio.

Copy()

Este método devuelve una copia superficial del tipo diccionario:

dictConElementos1 = {'nombre': 'Jaider Quintero', 'cargo': 'Docente', 'salario': 1500000}

dictConElementos2 = versiones.copy()

dictConElementos2 = dictConElementos1.copy()
if (dictConElementos1 == dictConElementos2):
    print("True")
else: print("False")

El resultado seria verdadero.

Fromkeys()

Este método crea un nuevo diccionario con claves a partir de un tipo de dato secuencia. El valor de value por defecto es el tipo None.

dictConElementos3 = {'nombre': 'Jaider Quintero', 'cargo': 'Docente', 'salario': 1500000}
dictConElementos4 = dict.fromkeys(dictConElementos3)
print(dictConElementos4)

En el ejemplo anterior inicializa los valores de cada clave a None, mas puede inicializar un valor común por defecto para cada clave:

dictConElementos3 = {'nombre': 'Jaider Quintero', 'cargo': 'Docente', 'salario': 1500000}

dictConElementos4 = dictConElementos3.fromkeys()
print(dictConElementos4)

Crea un nuevo diccionario con las mismas claves: nombre, cargo y salario

con valor none en todas las claves.

Get()

Este método devuelve el valor en base a una coincidencia de búsqueda en un diccionario mediante una clave, de lo contrario devuelve el objeto None.

dictConElementos5 = {'nombre': 'Jaider Quintero', 'cargo': 'Docente', 'salario': 1500000}
print(dictConElementos5.get('nombre'))
print(dictConElementos5.get('apellidos'))

print(dictConElementos5.get('nombre')) ==> Devuelve el valor "Jaider Quintero"

print(dictConElementos5.get('apellidos')) ==> Devuelve None, dado que la clave apellidos no existe.

Otro Ejemplo:

Leer diccionario y comparar si el salario es mayor a un valor y mostar si tiene o no que pagar seguridad social.

dictConElementos = {
    'nombre': 'Jaider Quintero', 
    'cargo': 'Docente', 
    'salario': 900000
}

if(dictConElementos.get('salario') > 1000000):
    print("Debe pagar seg social")
else: print("No Debe pagar seg social")

Items()

Este método devuelve una lista de pares de diccionarios (clave, valor), como 2 tuplas.

dictConElementos6 = {'nombre': 'Jaider Quintero', 'cargo': 'Docente', 'salario': 1500000}
print(dictConElementos6)
print(dictConElementos6.items())
for item in dictConElementos6.items():
    print(item)

for (clave, valor) in dictConElementos6.items():
    print(clave, valor)

Keys()

Este método devuelve una lista de las claves del diccionario:

dictConElementos7 = {'nombre': 'Jaider Quintero', 'cargo': 'Docente', 'salario': 1500000}
print(dictConElementos7.keys())

Pop()

Este método remueve específicamente una clave de diccionario y devuelve valor correspondiente. Lanza una excepción KeyError si la clave no es encontrada.

dictConElementos8 = {'nombre': 'Jaider Quintero', 'cargo': 'Docente', 'salario': 1500000}
dictConElementos8.pop('cargo')
print(dictConElementos8.keys())

Elimina la clave y el valor correspondiente al cargo

Popitem()

Elimina el ultimo elemento clave valor, tantas veces hasta que el diccionario quede vacio

dictConElementos9 = {'nombre': 'Jaider Quintero', 'cargo': 'Docente', 'salario': 1500000}
dictConElementos9.popitem()
dictConElementos9.popitem()
dictConElementos9.popitem()

print(dictConElementos9.keys())

Values()

Este método devuelve una lista de los valores del diccionario:

dictConElementos10 = {'nombre': 'Jaider Quintero', 'cargo': 'Docente', 'salario': 1500000}
print(dictConElementos10.values())

Muestra solo los values, sin mostrar las claves.

Funciones

Los objetos de tipo diccionario tienen disponibles una serie de funciones integradas en el interprete Python para su tratamiento, a continuación algunas de estas:

Cmp()

Esta función es la misma función integrada cmp() en el interprete Python pero aplicada al uso de la secuencia de tipo diccionario.

La función cmp() es usado en Python para comparar valores y claves de dos diccionarios. Si la función devuelve el valor 0 si ambos diccionarios son igual, devuelve el valor 1 si el primer diccionario es mayor que el segundo diccionario y devuelve el valor -1 si el primer diccionario es menor que el segundo diccionario.

Len()

Esta función es la misma función integrada len() en el interprete Python pero aplicada al uso de la secuencia de tipo diccionario.

dictConElementos11 = {'nombre': 'Jaider Quintero', 'cargo': 'Docente', 'salario': 1500000}
print(len(dictConElementos11))

Sentencias

Los objetos de tipo diccionario tienen disponibles una serie de sentencias integradas en el interprete Python para su tratamiento, a continuación algunas de estas:

Del

Esta sentencia es la misma sentencia integrada del en el interprete Python pero aplicada al uso de la secuencia de tipo diccionario.

dictConElementos11 = {'nombre': 'Jaider Quintero', 'cargo': 'Docente', 'salario': 1500000}
del(dictConElementos11['cargo'])
print(dictConElementos11.keys())

En el código fuente anterior se usa la sentencia del para eliminar un elemento del diccionario mediante su respectiva clave.

Combinar Listas y Diccionarios

Ejemplos:

  • Capturar n empleados con una estructura definida en el diccionario, medinte un menu que indique si cuntinua o no hasta que llene la lista.
listaEmp = []
dicEmp = {}

continuar = True

while(continuar):
    n = input("Ingrese el Nombre => ")
    c = input("Ingrese el Cargo => ")
    s = int(input("Ingrese el Salario => "))
    dicEmp = {'nombre': n, 'cargo': c, 'salario': s}
    listaEmp.append(dicEmp)

    cont = input("desea continuar s/n")
    if (cont == 'n'):
        continuar = False

for lista in listaEmp:
    print(lista)
  • Capturar n empleados con una estructura definida en el diccionario, utilizando listas con diccionarios mediante un menú que indique si continúo o no, hasta que llene la lista de diccionario. Adicionalmente, mostrar la lista de diccionarios en columnas, tipo excel.
class Persona():
    def __init__(self):
        self.__perso = {}
        self.__listaPersona = []


    def agregarPersona(self, nombre, apellido, direccion, telefono):   
        self.__perso = {
            'nombre': nombre,
            'apellido': apellido,
            'direccion': direccion,
            'telefono': telefono
        }
        self.__listaPersona.append(self.__perso)


    def mostrarPersona(self):
        # print(self.__listaPersona)
        for item in self.__listaPersona:
            print(f"Nombre: {item['nombre']} \t \t Apellido: {item['apellido']} \t \t Direccion: {item['direccion']} \t \t Telefono: {item['telefono']}")

    def inactivoPersona(self):
        self.__activo = False

def ingresarDatos():
    p1 = Persona()
    continuar=True
    while(continuar):
        nom = input("Ingrese el Nombre > ")
        ape = input("Ingrese el Apellido > ")
        dire = input("Ingrese la Direccion > ")
        tel = input("Ingrese el Telefono > ")  
        p1.agregarPersona(nom, ape, dire, tel)
        c = input("Desea Continuar S/N > ")
        c = c.upper()
        if(c == "N"):
            continuar = False
    p1.mostrarPersona()


def inicio():
    ingresarDatos()





if __name__ == "__main__":
    inicio()