Python/Tipos de datos nativos/Presentación de los diccionarios
Uno de los tipos incorporados de Python es el diccionario, que define relaciones uno a uno entre claves y valores.
- Un diccionario en Python es como un hash en Perl. En Perl, las variables que almacenan hashes siempre empiezan con un carácter %. En Python las variables se pueden llamar de cualquier manera, y Python sabe su tipo internamente.
- Un diccionario en Python es como una instancia de la clase Hashtable de Java.
- Un diccionario en Python es como una instancia del objeto Scripting.Dictionary de Visual Basic.
Definir diccionarios
[editar]Ejemplo 3.1. Definición de un diccionario
>>> d = {"server":"mpilgrim", "database":"master"} [1] >>> d {'server': 'mpilgrim', 'database': 'master'} >>> d["server"] [2] 'mpilgrim' >>> d["database"] [3] 'master' >>> d["mpilgrim"] [4] Traceback (innermost last): File "<interactive input>", line 1, in ? KeyError: mpilgrim
- [1] Primero creamos un nuevo diccionario con dos elementos y lo asignamos a la variable d. Cada elemento es un par clave-valor, y el conjunto de los elementos se encierra entre llaves.
- [2] 'server' es una clave, y su valor asociado, referenciado por d["server"], es 'mpilgrim'.
- [3] 'database' es una clave, y su valor asociado, referenciado por d["database"], es 'master'.
- [4] Puede obtener los valores por su clave pero no las claves por su valor. De manera que d["server"] es 'mpilgrim', pero d["mpilgrim"] genera una excepción, porque 'mpilgrim' no es una clave.
Modificar diccionarios
[editar]Ejemplo 3.2. Modificación de un diccionario
>>> d {'server': 'mpilgrim', 'database': 'master'} >>> d["database"] = "pubs" [1] >>> d {'server': 'mpilgrim', 'database': 'pubs'} >>> d["uid"] = "sa" [2] >>> d {'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'}
- [1] No puede tener claves duplicadas en un diccionario. Asignar un valor nuevo a una clave existente elimina el valor antiguo.
- [2] Puede añadir pares clave-valor en cualquier momento. Esta sintaxis es idéntica a la usada para modificar valores existentes (sí, esto le irritará algún día cuando piense que está añadiendo valores nuevos pero en realidad sólo está modificando el mismo valor una y otra vez porque la clave no está cambiando como usted piensa.)
Advierta que el nuevo elemento (clave 'uid', valor 'sa') aparece en el medio. En realidad es sólo coincidencia que los elementos apareciesen en orden en el primer ejemplo; también es coincidencia que ahora aparezcan en desorden.
- Nota: Los diccionarios no tienen concepto de orden entre sus elementos. Es incorrecto decir que los elementos están "desordenados", ya que simplemente no tienen orden. Esto es una distinción importante que le irritará cuando intente acceder a los elementos de un diccionario en un orden específico y repetible (por ejemplo, en orden alfabético por clave). Hay maneras de hacer esto, pero no vienen de serie en el diccionario.
Cuando trabaje con diccionarios, ha de tener en cuenta que las claves diferencian entre mayúsculas y minúsculas. 1
Ejemplo 3.3. Las claves de los diccionarios distinguen las mayúsculas
>>> d = {} >>> d["clave"] = "valor" >>> d["clave"] = "otro valor" [1] >>> d {'clave': 'otro valor'} >>> d["Clave"] = "tercer valor" [2] >>> d {'Clave': 'tercer valor', 'clave': 'otro valor'}
- [1] Asignar un valor a una clave existente en un diccionario simplemente reemplaza el valor antiguo por el nuevo.
- [2] Esto no asigna un valor a una clave existente, porque las cadenas en Python distinguen las mayúsculas, de manera que 'clave' no es lo mismo que 'Clave'. Esto crea un nuevo par clave/valor en el diccionario; puede parecerle similar, pero en lo que concierne a Python es completamente diferente.
Ejemplo 3.4. Mezcla de tipos de dato en un diccionario
>>> d {'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'} >>> d["retrycount"] = 3 [1] >>> d {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 'retrycount': 3} >>> d[42] = "douglas" [2] >>> d {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 42: 'douglas', 'retrycount': 3}
- [1] Los diccionarios no son sólo para las cadenas. Los valores de los diccionarios pueden ser cualquier tipo de dato, incluyendo cadenas, enteros, objetos o incluso otros diccionarios. Y dentro de un mismo diccionario los valores no tienen por qué ser del mismo tipo: puede mezclarlos según necesite.
- [2] Las claves de los diccionarios están más restringidas, pero pueden ser cadenas, enteros y unos pocos tipos más. También puede mezclar los tipos de claves dentro de un diccionario.
Borrar elementos de diccionarios
[editar]Ejemplo 3.5. Borrar elementos de un diccionario
>>> d {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 42: 'douglas', 'retrycount': 3} >>> del d[42] [1] >>> d {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 'retrycount': 3} >>> d.clear() [2] >>> d {}
- [1] del le permite borrar elementos individuales de un diccionario por su clave.
- [2] clear elimina todos los elementos de un diccionario. Observe que unas llaves vacías indica un diccionario sin elementos.
Lecturas complementarias sobre diccionarios
[editar]- How to Think Like a Computer Scientist le instruye sobre los diccionarios y le muestra cómo usarlos para modelar matrices dispersas.
- La Python Knowledge Base tiene muchos ejemplos de código que usan diccionarios.
- El Python Cookbook comenta cómo ordenar los valores de un diccionario por clave.
- La Referencia de bibliotecas de Python lista todos los métodos de los diccionarios.
Notas al pie
[editar][1] N. del T.: En inglés se dice que es case sensitive, que en castellano se traduce como sensible a la caja. "Caja", en el ámbito de la tipografía, se usa tradicionalmente para definir si una letra es mayúscula (caja alta) o minúscula (caja baja), en referencia al lugar en que se almacenaban los tipos móviles en las imprentas antiguas. En el resto del libro diré simplemente que se "distinguen las mayúsculas" (o no).