Python: Diccionarios

Podemos definir un diccionario vacío con llaves {} o añadiendo pares de 'clave': 'valor' separados por comas:

In [1]: diccionario1 = {}

In [2]: diccionario2 = {'ip1': '10.0.0.1', 'servidor1': 'servidor.dominio'}

Para acceder a los datos debemos indicar la clave (key) para obtener su valor, lo mismo que para asignar un valor.

In [1]: diccionario = {'ip1': '10.0.0.1', 'servidor1': 'servidor.dominio'}

In [2]: diccionario['ip1']
Out[2]: '10.0.0.1'

In [3]: diccionario['servidor1']
Out[3]: 'servidor.dominio'

In [4]: diccionario['servidor1'] = 'nuevo'

In [5]: diccionario['servidor1']
Out[5]: 'nuevo'

Podemos obtener un listado con todos las claves (keys) de un diccionario:

In [1]: diccionario = {'ip1': '10.0.0.1', 'servidor1': 'servidor.dominio'}

In [2]: diccionario.keys()
Out[2]: dict_keys(['ip1', 'servidor1'])

In [3]: for k in diccionario.keys():
   ...:     print(k, " = ", diccionario[k])
   ...:
ip1  =  10.0.0.1
servidor1  =  servidor.dominio

In [4]: for k in diccionario:
   ...:     print(k, " = ", diccionario[k])
   ...:
ip1  =  10.0.0.1
servidor1  =  servidor.dominio

También podemos obtener ambos al mismo tiempo:

In [1]: diccionario = {'ip1': '10.0.0.1', 'servidor1': 'servidor.dominio'}

In [2]: for k,v in diccionario.items():
   ...:     print(k, " = ", v)
   ...:
ip1  =  10.0.0.1
servidor1  =  servidor.dominio

Si intentamos obtener una clave que NO existe se producirá una excepción y el programa Python terminará, para evitarlo podemos usar el método .get(key[, default]) que obtiene el valor de la clave proporcionada y en caso de no existir nos devuelve por defecto None o el valor que hayamos indicado en default.

In [1]: diccionario = {'ip1': '10.0.0.1', 'servidor1': 'servidor.dominio'}

In [2]: diccionario['marca']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
 in ()
----> 1 diccionario['marca']

KeyError: 'marca'

In [3]: diccionario.get('marca')

In [4]: diccionario.get('marca', 'marca por defecto')
Out[4]: 'marca por defecto'

In [5]: diccionario.get('ip1')
Out[5]: '10.0.0.1'

Para borrar un valor (con su clave) podemos usar del d[key] pero si la clave (key) no existe se produce un error, por eso es mejor usar .pop(key[, default]) que al igual que .get(key[, default]) si no existe la clave (key) devuelve el valor por defecto indicado. Si no especificamos un valor por defecto y la clave no existe se produce un error.

In [1]: diccionario = {'ip1': '10.0.0.1', 'servidor1': 'servidor.dominio'}

In [2]: diccionario.pop('ip2')
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
 in ()
----> 1 diccionario.pop('ip2')

KeyError: 'ip2'

In [3]: diccionario.pop('ip2', None)

In [4]: diccionario.pop('ip1')
Out[4]: '10.0.0.1'

In [5]: diccionario
Out[5]: {'servidor1': 'servidor.dominio'}

Si la clave (key) está en el diccionario, devuelve su valor. Si no, inserta la clave (key) con valor de default y devuelve dicho valor (default). Si no se especifica un valor, por defecto es None.

In [1]: diccionario = {'ip1': '10.0.0.1', 'servidor1': 'servidor.dominio'}

In [2]: diccionario.setdefault('ip1')
Out[2]: '10.0.0.1'

In [3]: diccionario.setdefault('ip2')

In [4]: diccionario
Out[4]: {'ip1': '10.0.0.1', 'ip2': None, 'servidor1': 'servidor.dominio'}

In [5]: diccionario.setdefault('ip2', '8.8.8.8')

In [6]: diccionario
Out[6]: {'ip1': '10.0.0.1', 'ip2': None, 'servidor1': 'servidor.dominio'}

In [7]: diccionario.setdefault('ip3', '8.8.8.8')
Out[7]: '8.8.8.8'

In [8]: diccionario
Out[8]: {'ip1': '10.0.0.1', 'ip2': None, 'ip3': '8.8.8.8', 'servidor1': 'servidor.dominio'}

Actualiza el diccionario con las claves/valores de otro (other) diccionario. Si la clave existe machaca el valor y si no existe añade la clave/valor al diccionario.

In [1]: diccionario1 = {'ip1': '10.0.0.2', 'servidor1': 'servidor.dominio'}

In [2]: diccionario2 = {'ip1': '10.0.0.1', 'marca': 'marca.servidor'}

In [3]: diccionario1.update(diccionario2)

In [4]: diccionario1
Out[4]: {'ip1': '10.0.0.1', 'marca': 'marca.servidor', 'servidor1': 'servidor.dominio'}

In [5]: diccionario2
Out[5]: {'ip1': '10.0.0.1', 'marca': 'marca.servidor'}

Más información en: diccionarios

Retro

Lugares

Redes

Sistemas

Varios