Dictionaries - Learn Python 3 - Snakify

Lesson 11
Diccionarios


1. Diccionarios

Las listas normales (matrices) generalmente son un conjunto de elementos numerados, por lo que si desea hacer una referencia a cualquier elemento de la lista, debe especificar su número. El número de elementos en la lista identifica de manera única el elemento en sí. Pero los números de identificación no siempre son convenientes. Por ejemplo, las rutas de trenes en Rusia usan letras y números como código de identificación (número y dígito), también el código numérico alfabético identifica los vuelos, es decir, la información sobre vuelos, trenes o ID de aeronave debe almacenarse no como un número, sino como una cadena de texto

La estructura de datos, que permite utilizar un tipo de índice arbitrario en lugar de numérico, se denomina matriz de diccionario o asociativa . La estructura de datos correspondiente en Python se llama dict .

Considera un ejemplo simple. Obtenga el diccionario Capitals , donde index es el nombre del país y el valor: el nombre de la capital de este país. Ahora, por una fila con el nombre del país, podemos identificar fácilmente su capital.

# Crear mayúsculas dict vacías
Capitals = dict()

# Llénalo con algunos valores
Capitals['Russia'] = 'Moscow'
Capitals['Ukraine'] = 'Kiev'
Capitals['USA'] = 'Washington'

Countries = ['Russia', 'France', 'USA', 'Russia']

for country in Countries:
  # Para cada país de la lista, compruebe si está en el diccionario Capitales
    if country in Capitals:
        print('The capital of ' + country + ' is ' + Capitals[country])
    else:
        print('The capital of ' + country + ' is unknown')

Entonces, cada elemento del diccionario consta de dos objetos: clave y valores . En nuestro ejemplo, la clave es el nombre del país y el valor es el nombre de la capital. La clave identifica el elemento del diccionario, el valor son los datos correspondientes a la clave dada. Los valores clave son únicos, es decir, no puede haber dos claves idénticas en el diccionario.

Estamos acostumbrados a los diccionarios que nos rodean, los diccionarios de papel habituales (definitorios, monolingües, bilingües). Para definir el diccionario, la clave es la palabra (el título del artículo), y el valor es el artículo en sí, y para acceder al artículo, debe especificar la palabra clave.

Un directorio telefónico es otro ejemplo de estructura de datos de diccionario. En este caso, la clave es el nombre y el valor es el número de teléfono. Para el diccionario y el directorio telefónico, es fácil encontrar un elemento del diccionario con una tecla determinada (por ejemplo, si los registros se almacenan en orden alfabético de las teclas, puede encontrar fácilmente su clave con una búsqueda binaria), pero si la clave es desconocido, y solo conocemos el valor, la búsqueda del elemento con el valor dado puede requerir una vista consistente de todos los elementos del diccionario.

Una característica importante de la matriz asociativa es que es dinámica, es decir, puede agregar nuevos elementos con cualquier clave y eliminar los elementos existentes. La cantidad de memoria utilizada es proporcional al tamaño de la matriz asociativa. El acceso a los elementos de una matriz asociativa es más lento que para las matrices ordinarias, pero aún bastante rápido.

En Python, la clave puede ser cualquier tipo de datos inmutables (no modificables): enteros y números reales, cadenas, tuplas. La clave en el diccionario puede no ser un conjunto, pero puede ser un elemento de tipo frozenset : un tipo de datos especial análogo de un set tipos que no se puede modificar después de la creación. El valor del elemento del diccionario puede ser cualquier tipo de datos, incluidos los modificables.

Advertising by Google, may be based on your interests

2. Aplicando diccionarios

Los diccionarios se usan en los siguientes casos:

  • contar el número de algunos objetos. En este caso, debe crear un diccionario donde las claves sean objetos y los valores sean cantidades.
  • el almacenamiento de cualquier información asociada con el objeto. Las claves son objetos, los valores son datos asociados. Por ejemplo, si desea determinar el número de secuencia del mes por su nombre, puede hacerlo utilizando el diccionario Num['January'] = 1; Num['February'] = 2; ...
  • establecer la correspondencia entre los objetos (por ejemplo, «el descendiente principal»). La clave es el objeto y el valor es el objeto correspondiente.
  • si necesita una matriz simple, pero el valor máximo del índice del elemento es muy grande, aunque no se usarán todos los índices posibles (la denominada "matriz dispersa"), puede usar la matriz asociativa para guardar la memoria.

    Se puede crear un diccionario vacío usando la función dict() o un par de llaves vacías {} (esta es en realidad la razón por la cual las llaves no se pueden usar para crear un conjunto vacío). Para crear un diccionario con un conjunto de valores iniciales, puede usar las siguientes construcciones:

    Capitals = {'Russia': 'Moscow', 'Ukraine': 'Kiev', 'USA': 'Washington'}
    Capitals = dict(RA = 'Moscow', Ukraine = 'Kiev', USA = 'Washington')
    Capitals = dict([("Russia", "Moscow"), ("Ukraine", "Kiev"), ("USA", "Washington")])
    Capitals = dict(zip(["Russia", "Ukraine", "USA"], ["Moscow", "Kiev", "Washington"]))
    print(Capitals)
    

    Los primeros dos métodos solo se pueden usar para crear diccionarios pequeños al enumerar todos sus elementos. Además, en el segundo método, las claves se pasan como parámetros nombrados de dict , por lo que en este caso, las claves solo pueden ser cadenas y solo identificadores correctos. En el tercer y cuarto caso, puede crear diccionarios grandes, si los argumentos transferidos son una lista preparada, que puede obtenerse no solo enumerando todos los elementos, sino que se construyen de cualquier otra forma durante la ejecución del programa. En la tercera forma, la función dict necesita recibir una lista donde cada elemento es una tupla de dos elementos: clave y valor. El cuarto método usa la función zip , que necesita recibir dos listas de igual longitud: una lista de claves y una lista de valores.

    Advertising by Google, may be based on your interests
  • 3. Trabajando con artículos del diccionario

    Operación básica: obtener el valor del elemento por su clave. Está escrito exactamente como para las listas: A[key] . Si no hay ningún elemento con una clave especificada en el diccionario, se genera la excepción KeyError .

    Otra forma de definir el valor basado en una clave es un método get : A.get(key) . Si no hay ningún elemento con la clave get en el diccionario, devuelve None . En la forma con dos argumentos A.get(key, val) método A.get(key, val) devuelve val , si un elemento con la clave key no está en el diccionario.

    Para verificar si un elemento pertenece a un diccionario, se utilizan las operaciones in y not in , al igual que para los sets.

    Para agregar un nuevo elemento al diccionario, solo debe asignarle un valor: A[key] = value .

    Para eliminar un elemento del diccionario, puede usar del A[key] (la operación genera una excepción KeyError si no hay tal clave en el diccionario.) Aquí hay dos formas seguras de eliminar un elemento del diccionario.

    A = {'ab' : 'ba', 'aa' : 'aa', 'bb' : 'bb', 'ba' : 'ab'}
    
    key = 'ac'
    if key in A:
        del A[key]
    
    try:
        del A[key]
    except KeyError:
    	print('There is no element with key "' + key + '" in dict')
    print(A)
    

    En el primer caso, verificamos preliminarmente la presencia de un elemento, luego capturamos y manejamos la excepción.

    Otra forma de eliminar un elemento del diccionario es el método pop : A.pop(key) . Este método devuelve el valor del elemento eliminado y si el elemento con la clave dada no está en el diccionario, se genera una excepción. Si el método pop recibe un segundo parámetro, que para el elemento que falta, devolverá el valor de este parámetro. Esto permite organizar de forma segura la eliminación del elemento del diccionario: A.pop(key, None) .

    Advertising by Google, may be based on your interests

    4. Diccionario de iteración

    Puede repetir fácilmente las teclas de todos los elementos en el diccionario:

    A = dict(zip('abcdef', list(range(6))))
    for key in A:
        print(key, A[key])
    

    Los siguientes métodos devuelven la representación de los elementos del diccionario. Las representaciones son similares a los conjuntos, pero cambian si cambia los valores de los elementos. Las keys método devuelven una representación de las claves de todos los elementos, los values devuelven una representación de todos los valores, y los items método devuelven una representación de todos los pares (tuplas) de claves y valores.

    Por lo tanto, para una comprobación rápida de si el valor val encuentra entre todos los valores del diccionario A , debe usar la condición booleana val in A.values() . Para recorrer las claves y las variables, puede hacer lo siguiente:

    A = dict(zip('abcdef', list(range(6))))
    for key, val in A.items():
        print(key, val)
    
    Advertising by Google, may be based on your interests