Python: Estructuras de datos: Diccionarios

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

diccionario1 = {}

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.

diccionario = {'ip1': '10.0.0.1', 'servidor1': 'servidor.dominio'}

diccionario['ip1']
'10.0.0.1'

diccionario['servidor1']
'servidor.dominio'

diccionario['servidor1'] = 'nuevo'

diccionario['servidor1']
'nuevo'

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.

diccionario = {'ip1': '10.0.0.1', 'servidor1': 'servidor.dominio'}

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

KeyError: 'marca'

diccionario.get('marca')

diccionario.get('marca', 'marca por defecto')
'marca por defecto'

diccionario.get('ip1')
'10.0.0.1'

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.

diccionario = {'ip1': '10.0.0.1', 'servidor1': 'servidor.dominio'}

diccionario.setdefault('ip1')
'10.0.0.1'

diccionario.setdefault('ip2')

diccionario
{'ip1': '10.0.0.1', 'ip2': None, 'servidor1': 'servidor.dominio'}

diccionario.setdefault('ip2', '8.8.8.8')

diccionario
{'ip1': '10.0.0.1', 'ip2': None, 'servidor1': 'servidor.dominio'}

diccionario.setdefault('ip3', '8.8.8.8')
'8.8.8.8'

diccionario
{'ip1': '10.0.0.1', 'ip2': None, 'ip3': '8.8.8.8', 'servidor1': 'servidor.dominio'}

Para borrar un elemento usamos del:

diccionario = {'ip1': '10.0.0.1', 'servidor1': 'servidor.dominio'}

diccionario
{'ip1': '10.0.0.1', 'servidor1': 'servidor.dominio'}

del diccionario['ip1']

diccionario[
{'servidor1': 'servidor.dominio'}

Para borrar el diccionario completo es como si lo creásemos de cero, de la forma diccionario = {}

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.

diccionario = {'ip1': '10.0.0.1', 'servidor1': 'servidor.dominio'}

diccionario.pop('ip2')
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
 in ()
----> 1 diccionario.pop('ip2')

KeyError: 'ip2'

diccionario.pop('ip2', None)

diccionario.pop('ip1')
'10.0.0.1'

diccionario
{'servidor1': 'servidor.dominio'}

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

diccionario = {'ip1': '10.0.0.1', 'servidor1': 'servidor.dominio'}

diccionario.keys()
dict_keys(['ip1', 'servidor1'])

for clave in diccionario.keys():
    print(clave, " = ", diccionario[clave])

ip1  =  10.0.0.1
servidor1  =  servidor.dominio

# Sin poner .keys()
for clave in diccionario:
    print(clave, " = ", diccionario[clave])

ip1  =  10.0.0.1
servidor1  =  servidor.dominio

También podemos obtener ambos al mismo tiempo:

diccionario = {'ip1': '10.0.0.1', 'servidor1': 'servidor.dominio'}

for clave,valor in diccionario.items():
    print(clave, " = ", valor)

ip1  =  10.0.0.1
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.

diccionario1 = {'ip1': '10.0.0.2', 'servidor1': 'servidor.dominio'}

diccionario2 = {'ip1': '10.0.0.1', 'marca': 'marca.servidor'}

diccionario1.update(diccionario2)

diccionario1
{'ip1': '10.0.0.1', 'marca': 'marca.servidor', 'servidor1': 'servidor.dominio'}

diccionario2
{'ip1': '10.0.0.1', 'marca': 'marca.servidor'}

Para saber el número de elementos d eun diccionario tenemos len():

diccionario
{'10.0.0.2': 'switch', '192.168.1.1': 'router', '172.16.1.1': 'call manager'}

len(diccionario)
3

Podemos ver si una clave está en el diccionario:

diccionario = {'10.0.0.2': 'switch', '192.168.1.1': 'router'}

'192.168.1.1' in diccionario
True

Más información en: diccionarios

Retro

Lugares

Redes

Sistemas

Varios