Diccionarios
De WikiEducator
Contenido
¿Qué son?
Son colecciones de datos que almacenan la infomación por parejas clave-valor (tablas hash o arrays asociativos en otros lenguajes de programación)
Ejemplo y uso
# creamos diccionario # importante: llaves {} >>> estudiante = {'nombre': 'Luis Pastor', 'edad': 19, 'curso': '1 DAW'} # acceso a un elemento: por clave, no por posición >>> estudiante['nombre'] 'Luis Pastor' >>> estudiante['edad'] 19 # modificación de un valor >>> estudiante['edad'] += 1 >>> estudiante['edad'] 20 # creación de una nueva pareja clave-valor >>> estudiante['telf'] = '6453333210' >>> estudiante {'edad': 20, 'nombre': 'Luis Pastor', 'telf': '6453333210', 'curso': '1 DAW'} # comprobación de si existe una clave >>> estudiante.has_key('edad') True >>> estudiante.has_key('matrícula') False >>> 'edad' in estudiante True # ¿claves del diccionario? >>> estudiante.keys() ['edad', 'nombre', 'telf', 'curso'] # ¿valores del diccionario? >>> estudiante.values() [20, 'Luis Pastor', '6453333210', '1 DAW'] # parejas clave-valor >>> estudiante.items() [('edad', 20), ('nombre', 'Luis Pastor'), ('telf', '6453333210'), ('curso', '1 DAW')] # obtener un valor, configurando valor por defecto si no existe esa clave >>> estudiante.get('edad') 20 >>> estudiante.get('matrícula', 'Sin completar') 'Sin completar' # eliminar entrada >>> del estudiante['curso'] >>> estudiante {'edad': 20, 'nombre': 'Luis Pastor', 'telf': '6453333210'} # borrar todo el contenido del diccionario >>> estudiante.clear() >>> estudiante {}
Más operaciones
¿Imprimir con claves ordenadas?
>>> for clave in estudiante: print clave, '-->', estudiante[clave] edad --> 19 nombre --> Luis Pastor curso --> 1 DAW >>> claves = estudiante.keys() >>> claves.sort() >>> for clave in claves: print clave, '-->', estudiante[clave] curso --> 1 DAW edad --> 19 nombre --> Luis Pastor
Un ejemplo: estudio de la frecuencia de palabras en un texto
import string fnombre = raw_input('Intro ruta del fichero de texto a analizar: ') # leemos el fichero como una cadena texto = open(fnombre).read() # conversión a minúsculas texto = texto.lower() # reemplazo de signos de puntuacion por espacios for signo in string.punctuation: texto.replace(signo, ' ') # troceamos por palabras (por los espacios en blanco) palabras = texto.split() # palabras es ahora una lista de cadenas frecuencia = {} # contamos palabras. Incrementamos for pal in palabras: frecuencia[pal] = frecuencia.get(pal, 0) + 1 # mostrar resultado for clave, valor in frecuencia.items(): print clave, valor # ordenar resultado import operator sorted(frecuencia.items(), key=operator.itemgetter(1), reverse=True) # o más eficiente con diccionarios grandes sorted(frecuencia.iteritems(), key=operator.itemgetter(1), reverse=True)
Ejercicios
- Modifica el ejercicio de la agenda de la sección anterior para que la información no se almacene en listas, sino en diccionarios: tu agenda será un diccionario de diccionarios. Usa como clave el nombre de tus contactos.