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