Diccionarios
Diccionarios
Un diccionario es una colección de pares formados por una clave y un valor asociado a la clave.
Se construyen poniendo los pares entre llaves { }
separados por comas, y separando la clave del valor con dos puntos :
.
Se caracterizan por:
- No tienen orden.
- Pueden contener elementos de distintos tipos.
- Son mutables, es decir, pueden alterarse durante la ejecución de un programa.
- Las claves son únicas, es decir, no pueden repetirse en un mismo diccionario, y pueden ser de cualquier tipo de datos inmutable.
# Diccionario vacío
type({})
<class 'dict'>
# Diccionario con elementos de distintos tipos
{'nombre':'Alfredo', 'despacho': 218, 'email':'asalber@ceu.es'}
# Diccionarios anidados
{'nombre_completo':{'nombre': 'Alfredo', 'Apellidos': 'Sánchez Alberca'}}
Acceso a los elementos de un diccionario
d[clave]
devuelve el valor del diccionariod
asociado a la claveclave
. Si en el diccionario no existe esa clave devuelve un error.d.get(clave, valor)
devuelve el valor del diccionariod
asociado a la claveclave
. Si en el diccionario no existe esa clave devuelvevalor
, y si no se especifica un valor por defecto devuelveNone
.
>>> a = {'nombre':'Alfredo', 'despacho': 218, 'email':'asalber@ceu.es'}
>>> a['nombre']
'Alfredo'
>>> a['despacho'] = 210
>>> a
{'nombre':'Alfredo', 'despacho': 218, 'email':'asalber@ceu.es'}
>>> a.get('email')
'asalber@ceu.es'
>>> a.get('universidad', 'CEU')
'CEU'
Operaciones que no modifican un diccionario
len(d)
: Devuelve el número de elementos del diccionariod
.min(d)
: Devuelve la mínima clave del diccionariod
siempre que las claves sean comparables.max(d)
: Devuelve la máxima clave del diccionariod
siempre que las claves sean comparables.sum(d)
: Devuelve la suma de las claves del diccionariod
, siempre que las claves se puedan sumar.clave in d
: DevuelveTrue
si la claveclave
pertenece al diccionariod
yFalse
en caso contrario.d.keys()
: Devuelve un iterador sobre las claves de un diccionario.d.values()
: Devuelve un iterador sobre los valores de un diccionario.d.items()
: Devuelve un iterador sobre los pares clave-valor de un diccionario.
>>> a = {'nombre':'Alfredo', 'despacho': 218, 'email':'asalber@ceu.es'}
>>> len(a)
3
>>> min(a)
'despacho'
>>> 'email' in a
True
>>> a.keys()
dict_keys(['nombre', 'despacho', 'email'])
>>> a.values()
dict_values(['Alfredo', 218, 'asalber@ceu.es'])
>>> a.items()
dict_items([('nombre', 'Alfredo'), ('despacho', 218), ('email', 'asalber@ceu.es')])
Operaciones que modifican un diccionario
d[clave] = valor
: Añade al diccionariod
el par formado por la claveclave
y el valorvalor
.d.update(d2)
. Añade los pares del diccionariod2
al diccionariod
.d.pop(clave, alternativo)
: Devuelve del valor asociado a la claveclave
del diccionariod
y lo elimina del diccionario. Si la clave no está devuelve el valoralternativo
.d.popitem()
: Devuelve la tupla formada por la clave y el valor del último par añadido al diccionariod
y lo elimina del diccionario.del d[clave]
: Elimina del diccionariod
el par con la claveclave
.d.clear()
: Elimina todos los pares del diccionariod
de manera que se queda vacío.
>>> a = {'nombre':'Alfredo', 'despacho': 218, 'email':'asalber@ceu.es'}
>>> a['universidad'] = 'CEU'
>>> a
{'nombre': 'Alfredo', 'despacho': 218, 'email': 'asalber@ceu.es', 'universidad': 'CEU'}
>>> a.pop('despacho')
218
>>> a
{'nombre': 'Alfredo', 'email': 'asalber@ceu.es', 'universidad': 'CEU'}
>>> a.popitem()
('universidad', 'CEU')
>>> a
{'nombre': 'Alfredo', 'email': 'asalber@ceu.es'}
>>> del a['email']
>>> a
{'nombre': 'Alfredo'}
>>> a.clear()
>>> a
{}
Copia de diccionarios
Existen dos formas de copiar diccionarios:
- Copia por referencia
d1 = d2
: Asocia la la variabled1
el mismo diccionario que tiene asociado la variabled2
, es decir, ambas variables apuntan a la misma dirección de memoria. Cualquier cambio que hagamos a través del1
ol2
afectará al mismo diccionario. - Copia por valor
d1 = list(d2)
: Crea una copia del diccionario asociado ad2
en una dirección de memoria diferente y se la asocia ad1
. Las variables apuntan a direcciones de memoria diferentes que contienen los mismos datos. Cualquier cambio que hagamos a través del1
no afectará al diccionario del2
y viceversa.
>>> a = {1:'A', 2:'B', 3:'C'}
>>> # copia por referencia
>>> b = a
>>> b
{1:'A', 2:'B', 3:'C'}
>>> b.pop(2)
>>> b
{1:'A', 3:'C'}
>>> a
{1:'A', 3:'C'}
>>> a = {1:'A', 2:'B', 3:'C'}
>>> # copia por referencia
>>> b = dict(a)
>>> b
{1:'A', 2:'B', 3:'C'}
>>> b.pop(2)
>>> b
{1:'A', 3:'C'}
>>> a
{1:'A', 2:'B', 3:'C'}