Přidávání prvků do slovníku a spojování slovníků v Pythonu

Podnikání

Tato část vysvětluje, jak přidat nové prvky do slovníku (objekt typu dict) nebo aktualizovat hodnotu existujícího prvku v Pythonu. Je také možné zřetězit (připojit, sloučit) více slovníků.

  • Přidejte a aktualizujte prvky do slovníku zadáním klíčů.
  • Zřetězení (sloučení) více slovníků: update (), | operátor, | = operátor
  • Přidat nebo aktualizovat více prvků: update (), | = operátor

Přidejte a aktualizujte prvky do slovníku zadáním klíčů.

Prvky slovníku můžete přidat / aktualizovat následujícím způsobem.

Objekt slovníku [klíč] = hodnota

Když je zadán neexistující klíč, je přidán nový prvek a když je zadán existující klíč, je aktualizována (přepsána) existující hodnota.

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}

Pokud nechcete aktualizovat hodnotu existujícího klíče, použijte metodu setdefault ().

Zřetězit (sloučit) více slovníků: update (), | operátor, | = operátor

update()

Pokud je zadán jiný objekt slovníku jako argument metody metody slovníku objektu update (), budou přidány všechny jeho prvky.

Pokud se klíč překrývá s existujícím klíčem, bude přepsán hodnotou slovníku určenou v argumentu.

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}

Je chybou určit více slovníků v argumentu 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

Jak je vysvětleno později, update () může přidávat nové prvky jako argumenty klíčových slov (key = value), takže stačí přidat ** do slovníku a každý prvek rozšířit jako argument klíčového slova a předat jej.

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

Stejně jako v předchozích příkladech se pomocí aktualizace () aktualizuje původní objekt slovníku.

Pokud chcete vygenerovat nový slovník sloučením více slovníků, použijte {** d1, ** d2} (z Pythonu 3.5) nebo dict (** d1, ** d2).

V Pythonu 3.9 a novějších je také možné vytvořit nový slovník pomocí | operátor popsaný dále.

| operátor, | = operátor (Python 3.9 a novější)

Od Pythonu 3.9 je možné sloučit dva slovníky pomocí | operátor. Pokud mají dva slovníky stejný klíč, má přednost hodnota vpravo.

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}

| Je také možné kombinovat více slovníků pomocí řady operátorů.

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}

+ Stejně jako u aktualizace () je aktualizován objekt na levé straně.

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

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

Přidat nebo aktualizovat více prvků: update (), | = operátor

update()

Když je v metodě update () zadán argument klíčového slova klíč = hodnota, bude přidán klíč klíče a hodnota hodnoty. Pokud se klíč překrývá s existujícím klíčem, bude přepsán hodnotou uvedenou v argumentu.

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

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

Je také možné určit seznam (klíč, hodnota) jako argument metody update (). Pokud se klíč překrývá s existujícím klíčem, bude přepsán hodnotou zadanou jako argument.

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

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

V kombinaci s funkcí zip () lze prvky přidávat ze seznamu klíčů a seznamu hodnot.

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}

| = operátor (Python 3.9 a novější)

Pomocí operátoru | = lze na pravé straně zadat seznam (klíč, hodnota).

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

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

Všimněte si, že zadání seznamu pomocí | operátor bude mít za následek chybu. Podporovány jsou pouze operace ze slovníku do slovníku.

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