Diferencia de los diccionarios frente a listas en Python

A diferencia de las listas, los elementos de los diccionarios no están ordenados. El primer elemento de una lista llamada spam sería spam[0]. Pero en un diccionario no hay un «primer» elemento. Mientras que el orden de los elementos es importante para determinar si dos listas son iguales, no importa en qué orden se escriben los pares clave-valor en un diccionario. Introduzca lo siguiente en el shell interactivo:

>>> spam = ['cats', 'dogs', 'moose']
>>> bacon = ['dogs', 'moose', 'cats']
>>> spam == bacon
False
>>> eggs = {'name': 'Zophie', 'species': 'cat', 'age': '8'}
>>> ham = {'species': 'cat', 'age': '8', 'name': 'Zophie'}
>>> eggs == ham
True

Como los diccionarios no están ordenados, no se pueden trocear como las listas.

Intentar acceder a una clave que no existe en un diccionario dará lugar a un mensaje de error KeyError, muy parecido al mensaje de error IndexError de una lista. Introduzca lo siguiente en el intérprete de comandos interactivo, y fíjese en el mensaje de error que aparece porque no existe la clave 'color':

>>> spam = {'name': 'Zophie', 'age': 7}
>>> spam['color']
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    spam['color']
KeyError: 'color'

Uso de los diccionarios

Aunque los diccionarios no están ordenados, el hecho de que puedas tener valores arbitrarios para las claves te permite organizar tus datos de forma potente. Digamos que quieres que tu programa almacene datos sobre los cumpleaños de tus amigos. Puedes utilizar un diccionario con los nombres como claves y los cumpleaños como valores. Abre una nueva ventana del editor de archivos e introduce el siguiente código. Guárdalo como birthdays.py.

➊ birthdays = {'Alice': 'Apr 1', 'Bob': 'Dec 12', 'Carol': 'Mar 4'}

   while True:
       print('Enter a name: (blank to quit)')
       name = input()
       if name == '':
           break

    ➋ if name in birthdays:
        ➌ print(birthdays[name] + ' is the birthday of ' + name)
       else:
           print('I do not have birthday information for ' + name)
           print('What is their birthday?')
           bday = input()
        ➍ birthdays[name] = bday
           print('Birthday database updated.')

Puedes ver la ejecución de este programa en https://autbor.com/bdaydb. Se crea un diccionario inicial y se almacena en birthdays ➊. Puedes ver si el nombre introducido existe como clave en el diccionario con la palabra clave in ➋, igual que hiciste con las listas. Si el nombre está en el diccionario, accedes al valor asociado usando corchetes [] ➌; si no, puedes añadirlo usando la misma sintaxis de corchetes combinada con el operador de asignación ➍.

Cuando ejecute este programa, tendrá el siguiente aspecto:

Enter a name: (blank to quit)
Alice
Apr 1 is the birthday of Alice
Enter a name: (blank to quit)
Eve
I do not have birthday information for Eve
What is their birthday?
Dec 5
Birthday database updated.
Enter a name: (blank to quit)
Eve
Dec 5 is the birthday of Eve
Enter a name: (blank to quit)

Por supuesto, todos los datos introducidos en este programa se olvidan cuando el programa termina.

Deja una respuesta