Introducción a la programación en Python

clase 06b
Diccionarios

Los diccionarios son objetos de tipo mapa: colecciones no ordenadas de pares de la forma clave : valor.

A diferencia de las secuencias, que son ordenadas, los valores de los diccionarios no se acceden mediante un índice, sino a través de su clave. Los diccionarios en sí son mutables, pero como clave se puede usar solamente objetos de tipo inmutable, como números, cadenas de caracteres, o tuplas.

Los valores pueden ser objetos de cualquier tipo.

Una forma sencilla de definir un diccionario es poniendo entre llaves los pares clave : valor, separados por comas.

In [10]:
meses = {"enero" : 1, "febrero" : 2, "marzo" : 3, "abril" : 4, 
         "mayo" : 5, "junio" : 6, "julio": 7, "agosto" : 8, 
         "septiembre" : 9, "octubre" : 10, "noviembre" : 11, "diciembre" : 12}

meses["octubre"]
Out[10]:
10

También se puede crear un diccionario usando la función dict(), que admite varias sintaxis posibles, además de la ya vista:

In [11]:
d0 = {"marca" : "Microtek", "modelo" : "Master UltraLight"}
d1 = dict({"marca" : "Microtek", "modelo" : "Master UltraLight"})
d2 = dict(marca="Microtek", modelo="Master UltraLight")
d3 = dict([("marca", "Microtek"), ("modelo", "Master UltraLight")])
d4 = dict(zip(("marca", "modelo"), ("Microtek", "Master UltraLight")))

print(d0)
print(d1)
print(d2)
print(d3["marca"], d4["modelo"])
{'modelo': 'Master UltraLight', 'marca': 'Microtek'}
{'marca': 'Microtek', 'modelo': 'Master UltraLight'}
{'modelo': 'Master UltraLight', 'marca': 'Microtek'}
Microtek Master UltraLight

Ejemplo 6.1

Definir una función que, utilizando un diccionario, devuelva el nombre de nota de una clase de altura expresada numéricamente. Complementar con la función que convierte una altura en número de nota MIDI en un número de clase de altura.

In [12]:
def p_a_pc(pitch):
    '''convierte una altura en número de nota MIDI en un número de clase de altura'''
    pc = pitch % 12
    return pc

def midi_a_nombre(pitch):
    nombres = {0 : "do", 1 : "do#", 2 : "re", 3 : "mib",
               4 : "mi", 5 : "fa", 6 : "fa#", 7 : "sol",
               8 : "lab", 9 : "la", 10 : "sib", 11 : "si"}
    pc = p_a_pc(pitch)
    return nombres[pc]

print(midi_a_nombre(66))

alturas = [72, 62, 59, 56, 67, 70, 66, 57, 63, 76, 73, 65]
print([midi_a_nombre(i) for i in alturas])    
fa#
['do', 're', 'si', 'lab', 'sol', 'sib', 'fa#', 'la', 'mib', 'mi', 'do#', 'fa']

Métodos y operaciones con diccionarios

len(D) Devuelve la longitud del diccionario D.
D[k] Devuelve el valor de la clave k del diccionario D,
o un error si k no se encuentra en el diccionario.
D[k] = v Asigna el valor v a la clave k del diccionario D.
del D[k] Elimina el item k del diccionario D.
k in D Devuelve True si k es una clave de D.
D.keys() Devuelve todas las claves en el diccionario D.
D.values() Devuelve todos los valores en el diccionario D.
D.items() Devuelve tuples (clave, valor) por cada ítem en el diccionario D.
D.clear() Borra todos los ítem en el diccionario D.
D.copy() Devuelve una copia del diccionario D.
D1.update(D2) Fusiona todas las entradas de D2 en D1. Similar a
for (k, v) in D2.items(): D1[k] = v.
D.get(k [, default]) Similar a D[k], pero si k no se encuentra en el diccionario devuelve
el default (o None si no hay default) en vez de dar un error.
D.setdefault(k, [, default]) Similar a D.get(key, default), pero además asigna la clave k
al valor por default si no se encuentra en el diccionario.
D.popitem() Devuelve y elimina un par arbitrario (clave, valor).
D.pop(k [, default]) Si k se encuentra en el diccionario, devuelve D[k] y borra k.
De lo contrario, devuelve el default.
D.fromkeys(seq [, value]) Crea un nuevo diccionario con claves a partir de una secuencia seq
y con valores asignados a value.