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'}
También usando variables:
k = "clave"
v = "valor"
d = {k, v}
print(d)
{'clave', 'valor'}
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