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'