Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Diccionarios y Tuplas

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 32

Diccionarios y Tuplas

Un diccionario es como una lista, pero más general. En una lista, los índices de posiciones tienen que ser
enteros; en un diccionario, los índices pueden ser (casi) cualquier tipo.

Puedes pensar en un diccionario como una asociación entre un conjunto de índices (que son llamados
claves) y un conjunto de valores. Cada clave apunta a un valor. La asociación de una clave y un valor es
llamada par clave-valor o a veces elemento.

Como ejemplo, vamos a construir un diccionario que asocia palabras de Inglés a Español, así que todas las
claves y los valores son cadenas.

La función dict crea un nuevo diccionario sin elementos. Debido a que dict es el nombre de una función
interna, deberías evitar usarlo como un nombre de variable
Las llaves, {}, representan un diccionario vacío. Para agregar elementos a un diccionario, puedes utilizar
corchetes:

Esta línea crea un elemento asociando a la clave 'one' el valor “uno”. Si imprimimos el diccionario de nuevo,
vamos a ver un par clave-valor con dos puntos entre la clave y el valor:

Este formato de salida es también un formato de entrada. Por ejemplo, puedes crear un nuevo diccionario
con tres elementos. Pero si imprimes eng2sp, te vas a sorprender:
El orden de los pares clave-elemento no es el mismo. De hecho, si tu escribes este mismo ejemplo en tu
computadora, podrías obtener un resultado diferente. En general, el orden de los elementos en un
diccionario es impredecible. Pero ese no es un problema porque los elementos de un diccionario nunca
son indexados con índices enteros. En vez de eso, utilizas las claves para encontrar los valores
correspondientes:

La clave 'two' siempre se asocia al valor “dos”, así que el orden de los elementos no importa. Si la clave no
está en el diccionario, obtendrás una excepción (exception):

La función len funciona en diccionarios; ésta regresa el número de pares clave valor:
El operador in funciona en diccionarios; éste te dice si algo aparece como una clave en el diccionario
(aparecer como valor no es suficiente).

Para ver si algo aparece como valor en un diccionario, puedes usar el método values, el cual retorna los
valores como una lista, y después puedes usar el operador in:

El operador in utiliza diferentes algoritmos para listas y diccionarios. Para listas, utiliza un algoritmo de
búsqueda lineal. Conforme la lista se vuelve más grande, el tiempo de búsqueda se vuelve más largo en
proporción al tamaño de la lista. Para diccionarios, Python utiliza un algoritmo llamado tabla hash (hash
table, en inglés) que tiene una propiedad importante: el operador in toma la misma cantidad de tiempo sin
importar cuántos elementos haya en el diccionario
Bucles y diccionarios
Si utilizas un diccionario como una secuencia para una sentencia for, esta recorre las claves del
diccionario. Este bucle imprime cada clave y su valor correspondiente:

Aquí está lo que muestra de salida:

De nuevo, las claves no están en ningún orden en particular. Podemos utilizar este patrón para
implementar varios idiomas de bucles que hemos descrito previamente. Por ejemplo, si queremos
encontrar todas las entradas en un diccionario con valor mayor a diez, podemos escribir el siguiente
código:
El bucle for itera a través de las claves del diccionario, así que debemos utilizar el operador índice para
obtener el valor correspondiente para cada clave. Aquí está la salida del programa:

Vemos solamente las entradas que tienen un valor mayor a 10. Si quieres imprimir las claves en orden
alfabético, primero haces una lista de las claves en el diccionario utilizando el método keys disponible en
los objetos de diccionario, y después ordenar esa lista e iterar a través de la lista ordenada, buscando
cada clave e imprimiendo pares clave-valor ordenados, tal como se muestra a continuación:4

Así se muestra la salida:


Métodos principales
Vaciar un diccionario

Método: clear()

Crear un nuevo diccionario desde las claves de una secuencia

Método: dict.fromkeys(secuencia[, valor por defecto])


Copiar un diccionario

Método: copy()
Establecer una clave y valor por defecto

Método: setdefault(“clave”[, None|valor_por_defecto])


Concatenar diccionarios

Método: update(diccionario)

Obtener el valor de una clave

Método: get(clave[, “valor x defecto si la clave no existe”])


Saber si una clave existe en el diccionario

Método: has_key(clave)

Obtener las claves y valores de un diccionario

Método: iteritems() Alias: items()


Salida:
Obtener las claves de un diccionario

Método: keys()

Obtener los valores de un diccionario

Método: values()
Obtener la cantidad de elementos de un diccionario

Para contar los elementos de un diccionario, al igual que con las listas y tuplas, se utiliza la
función integrada len()
Las Tuplas son inmutables
Una tupla es una secuencia de valores similar a una lista. Los valores guardados en una tupla pueden ser
de cualquier tipo, y son indexados por números enteros. La principal diferencia es que las tuplas son
inmutables. Las tuplas además son comparables y dispersables (hashables) de modo que las listas de
tuplas se pueden ordenar y también usar tuplas como valores para las claves en diccionarios de Python.
Sintácticamente, una tupla es una lista de valores separados por comas:

Aunque no es necesario, es común encerrar las tuplas entre paréntesis para ayudarnos a identificarlas
rápidamente cuando revisemos código de Python:
Para crear una tupla con un solo elemento, es necesario incluir una coma al final:

Sin la coma, Python considera ('a') como una expresión con una cadena entre paréntesis que es evaluada
como de tipo cadena (string):

Otra forma de construir una tupla es utilizando la función interna tuple. Sin argumentos, ésta crea una tupla
vacía:
Si el argumento es una secuencia (cadena, lista, o tupla), el resultado de la llamada a tuple es una tupla
con los elementos de la secuencia

Dado que tuple es el nombre de un constructor, debería evitarse su uso como nombre de variable.

La mayoría de los operadores de listas también funcionan en tuplas. El operador corchete indexa un
elemento:

Y el operador de rebanado (slice) selecciona un rango de elementos.


Pero si se intenta modificar uno de los elementos de la tupla, se produce un error:

No se puede modificar los elementos de una tupla, pero sí se puede reemplazar una tupla por otra:
Comparación de tuplas
Los operadores de comparación funcionan con tuplas y otras secuencias. Python comienza comparando el primer
elemento de cada secuencia. Si ambos elementos son iguales, pasa al siguiente elemento y así sucesivamente,
hasta que encuentra elementos diferentes. Los elementos subsecuentes no son considerados (aunque sean muy
grandes)

La función sort funciona de la misma manera. Ordena inicialmente por el primer elemento, pero en el caso de que
ambos elementos sean iguales, ordena por el segundo elemento, y así sucesivamente. Esta característica se presta a
un patrón de diseño llamado DSU

Decorate (Decora) una secuencia, construyendo una lista de tuplas con uno o más índices ordenados precediendo
los elementos de la secuencia.

Sort (Ordena) la lista de tuplas utilizando la función interna sort

Undecorate (Quita la decoración) extrayendo los elementos ordenados de la secuencia.


Por ejemplo, suponiendo una lista de palabras que se quieren ordenar de la más larga a la más corta:

El primer bucle genera una lista de tuplas, donde cada tupla es una palabra precedida por su longitud. sort
compara el primer elemento (longitud) primero, y solamente considera el segundo elemento para
desempatar. El argumento clave reverse=True indica a sort que debe ir en orden decreciente. El segundo
bucle recorre la lista de tuplas y construye una lista de palabras en orden descendente según la longitud.
Las palabras de cuatro letras están ordenadas en orden alfabético inverso, así que “deja” aparece antes
que “allí” en la siguiente lista.

La salida del programa es la siguiente:


Asignación de Tuplas
Una de las características sintácticas únicas del lenguaje Python es la capacidad de tener una tupla en el
lado izquierdo de una sentencia de asignación. Esto permite asignar más de una variable a la vez cuando
hay una secuencia del lado izquierdo.

En este ejemplo tenemos una lista de dos elementos (la cual es una secuencia) y asignamos el primer y
segundo elementos de la secuencia a las variables x y y en una única sentencia.
No es magia, Python traduce aproximadamente la sintaxis de asignación de la tupla de este modo

Estilísticamente, cuando se utiliza una tupla en el lado izquierdo de la asignación, se omiten los paréntesis,
pero lo que se muestra a continuación es una sintaxis igualmente válida:
Una aplicación particularmente ingeniosa de asignación con tuplas permite intercambiar los valores de
dos variables en una sola sentencia:

Ambos lados de la sentencia son tuplas, pero el lado izquierdo es una tupla de variables; el lado derecho es
una tupla de expresiones. Cada valor en el lado derecho es asignado a su respectiva variable en el lado
izquierdo. Todas las expresiones en el lado derecho son evaluadas antes de realizar cualquier asignación.

El número de variables en el lado izquierdo y el número de valores en el lado derecho deben ser iguales:
Generalizando más, el lado derecho puede ser cualquier tipo de secuencia (cadena, lista, o tupla). Por
ejemplo, para dividir una dirección de e-mail en nombre de usuario y dominio, se podría escribir:

El valor de retorno de split es una lista con dos elementos; el primer elemento es asignado a nombreus, el
segundo a dominio
Diccionarios y tuplas
Los diccionarios tienen un método llamado items que retorna una lista de tuplas, donde cada tupla es un
par clave-valor:

Como sería de esperar en un diccionario, los elementos no tienen ningún orden en particular. Aun así,
puesto que la lista de tuplas es una lista, y las tuplas son comparables, ahora se puede ordenar la lista de
tuplas. Convertir un diccionario en una lista de tuplas es una forma de obtener el contenido de un
diccionario ordenado según sus claves:
Asignación múltiple con diccionarios
La combinación de items, asignación de tuplas, y for, produce un buen patrón de diseño de código para
recorrer las claves y valores de un diccionario en un único bucle

Como sería de esperar en un diccionario, los elementos no tienen ningún orden en particular. Aun así, Este
bucle tiene dos variables de iteración, debido a que items retorna una lista de tuplas y clave, valor es una
asignación en tupla que itera sucesivamente a través de cada uno de los pares clave-valor del diccionario.

Para cada iteración a través del bucle, tanto clave y valor van pasando al siguiente par clave-valor del
diccionario (todavía en orden de dispersión).

La salida de este bucle es:


Las claves están en orden de dispersión (es decir, ningún orden en particular).

Si se combinan esas dos técnicas, se puede imprimir el contenido de un diccionario ordenado por el valor
almacenado en cada par clave-valor.

Para hacer esto, primero se crea una lista de tuplas donde cada tupla es (valor, clave). El método items
dará una lista de tuplas (clave, valor), pero esta vez se pretende ordenar por valor, no por clave. Una vez
que se ha construido la lista con las tuplas clave-valor, es sencillo ordenar la lista en orden inverso e
imprimir la nueva lista ordenada.

Al construir cuidadosamente la lista de tuplas para tener el


valor como el primer elemento de cada tupla, es posible
ordenar la lista de tuplas y obtener el contenido de un
diccionario ordenado por valor
Uso de tuplas como claves en diccionarios
Dado que las tuplas son dispersables (hashable) y las listas no, si se quiere crear una clave compuesta
para usar en un diccionario, se debe utilizar una tupla como clave.

Usaríamos por ejemplo una clave compuesta si quisiéramos crear un directorio telefónico que mapea
pares apellido, nombre con números telefónicos. Asumiendo que hemos definido las variables apellido,
nombre, y número, podríamos escribir una sentencia de asignación de diccionario como sigue:

La expresión entre corchetes es una tupla. Podríamos utilizar asignación de tuplas en un bucle for para
recorrer este diccionario.

Este bucle recorre las claves en directorio, las cuales son tuplas. Asigna los elementos de cada tupla a
apellido y nombre, después imprime el nombre y el número telefónico correspondiente.
Listas y tuplas
Conversión de tipos

En el conjunto de las funciones integradas de Python, podemos encontrar dos funciones que nos permiten
convertir listas en tuplas y viceversa. Estas funciones pueden ser muy útiles cuando por ejemplo, una
variable declarada como tupla, necesita ser modificada en tiempo de ejecución, para lo cual, debe
convertirse en una lista puesto que las tuplas, son inmutables. Lo mismo sucede en el caso contrario: una
variable que haya sido declarada como lista y sea necesario convertirla en una colección inmutable.
Concatenación simple de colecciones

A diferencia de otros lenguajes, en Python es muy simple unir varias colecciones de un mismo tipo.
Simplemente, se requiere utilizar el operador suma (+) para lograrlo:
Valor máximo y mínimo

Podemos obtener además, el valor máximo y mínimo tanto de listas como de tuplas:

Obtener los valores de un diccionario

Al igual que para contar caracteres en una string, disponemos de la función integrada len() para conocer
la cantidad de elementos en una lista o en una tupla:
Secuencias: cadenas, listas, y tuplas
En muchos contextos, los diferentes tipos de secuencias (cadenas, listas, y tuplas) pueden intercambiarse. Así
que, ¿cómo y por qué elegir uno u otro? Para comenzar con lo más obvio, las cadenas están más limitadas que
otras secuencias, debido a que los elementos tienen que ser caracteres. Además, son inmutables. Si necesitas la
capacidad de cambiar los caracteres en una cadena (en vez de crear una nueva), quizá prefieras utilizar una lista
de caracteres. Las listas son más comunes que las tuplas, principalmente porque son mutables. Pero hay algunos
casos donde es preferible utilizar tuplas:

1. En algunos contextos, como una sentencia return, resulta sintácticamente más simple crear una tupla que una
lista. En otros contextos, es posible que prefieras una lista.

2. Si quieres utilizar una secuencia como una clave en un diccionario, debes usar un tipo inmutable como una
tupla o una cadena.

3. Si estás pasando una secuencia como argumento de una función, el uso de tuplas reduce la posibilidad de
comportamientos inesperados debido a la creación de alias. Dado que las tuplas son inmutables, no
proporcionan métodos como sort y reverse, que modifican listas ya existentes. Sin embargo, Python proporciona
las funciones internas sorted y reversed, que toman una secuencia como parámetro y devuelve una secuencia
nueva con los mismos elementos en un orden diferente.

También podría gustarte