Diccionarios

De WikiEducator
< Usuario:Lmorillas‎ | modulo programacion‎ | python
Revisión a fecha de 22:17 18 nov 2011; Lmorillas (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar


¿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

  1. 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.