Afegir elements a un diccionari i unir-se a diccionaris a Python

Negocis

En aquesta secció s’explica com afegir elements nous a un diccionari (objecte de tipus dict) o actualitzar el valor d’un element existent a Python. També és possible concatenar (unir, combinar) diversos diccionaris.

  • Afegiu i actualitzeu elements al diccionari especificant claus.
  • Concatenació (fusió) de diversos diccionaris: update (), | operador, | = operador
  • Afegiu o actualitzeu diversos elements: update (), | = operador

Afegiu i actualitzeu elements al diccionari especificant claus.

Podeu afegir / actualitzar elements del diccionari de la següent manera.

Objecte del diccionari [clau] = valor

Quan s’especifica una clau inexistent, s’afegeix un element nou i, quan s’especifica una clau existent, s’actualitza el valor existent (sobreescrit).

d = {'k1': 1, 'k2': 2}

d['k3'] = 3
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}

d['k1'] = 100
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3}

Si no voleu actualitzar el valor d’una clau que existeix, utilitzeu el mètode setdefault ().

Concatenar (combinar) diversos diccionaris: update (), | operador, | = operador

update()

Si s’especifica un altre objecte de diccionari com a argument al mètode update () de l’objecte de diccionari, s’afegiran tots els seus elements.

Si la clau se superposa a una clau existent, se sobreescriurà amb el valor del diccionari especificat a l’argument.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}

d1.update(d2)
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

És un error especificar diversos diccionaris a l’argument update ().

d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}

# d1.update(d2, d3)
# TypeError: update expected at most 1 arguments, got 2

Com s’explica més endavant, update () pot afegir elements nous com a arguments de paraules clau (clau = valor), així que només cal afegir ** al diccionari i ampliar cada element com a argument de paraula clau i passar-lo.

d1.update(**d2, **d3)
print(d1)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}

Com en els exemples anteriors, mitjançant update () s’actualitzarà l’objecte de diccionari original.

Si voleu generar un diccionari nou combinant diversos diccionaris, utilitzeu {** d1, ** d2} (de Python 3.5) o dict (** d1, ** d2).

A Python 3.9 i versions posteriors, també és possible crear un diccionari nou amb el | operador descrit a continuació.

| operador, | = operador (Python 3.9 i versions posteriors)

Des de Python 3.9, és possible combinar dos diccionaris amb el | operador. Quan dos diccionaris tenen la mateixa clau, el valor de la dreta té prioritat.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}

print(d1 | d2)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

print(d2 | d1)
# {'k1': 1, 'k3': 3, 'k4': 4, 'k2': 2}

| També és possible combinar diversos diccionaris mitjançant una sèrie d’operadors.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}

print(d1 | d2 | d3)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}

+ Igual que amb update (), l’objecte del costat esquerre s’actualitza.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}

d1 |= d2
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

Afegiu o actualitzeu diversos elements: update (), | = operador

update()

Quan s’especifica l’argument de paraula clau clau = valor al mètode update (), s’afegiran la clau de clau i el valor. Si la clau se superposa a una clau existent, se sobreescriurà amb el valor especificat a l’argument.

d = {'k1': 1, 'k2': 2}

d.update(k1=100, k3=3, k4=4)
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

També és possible especificar una llista de (clau, valor) com a argument del mètode update (). Si la clau se superposa a una clau existent, se sobreescriurà amb el valor especificat com a argument.

d = {'k1': 1, 'k2': 2}

d.update([('k1', 100), ('k3', 3), ('k4', 4)])
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

En combinació amb la funció zip (), es poden afegir elements des d’una llista de tecles i una llista de valors.

d = {'k1': 1, 'k2': 2}

keys = ['k1', 'k3', 'k4']
values = [100, 3, 4]

d.update(zip(keys, values))
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

| = operador (Python 3.9 i versions posteriors)

Amb l’operador | =, es pot especificar una llista de (clau, valor) a la part dreta.

d = {'k1': 1, 'k2': 2}

d |= [('k1', 100), ('k3', 3), ('k4', 4)]
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

Tingueu en compte que especificar una llista amb | l’operador produirà un error. Només s’admeten les operacions de diccionari a diccionari.

# print(d | [('k1', 100), ('k3', 3), ('k4', 4)])
# TypeError: unsupported operand type(s) for |: 'dict' and 'list'
Copied title and URL