Czy istnieje sposób na usunięcie elementu ze słownika w Pythonie?
Dodatkowo, jak mogę usunąć element ze słownika, aby zwrócić kopię (tj. nie modyfikując oryginału)?
Instrukcja del
usuwa element:
del d[key]
Jednakże, to mutuje istniejący słownik, więc jego zawartość zmienia się dla każdego, kto ma odniesienie do tej samej instancji. Aby zwrócić nowy słownik, wykonaj jego kopię:
def removekey(d, key):
r = dict(d)
del r[key]
return r
Konstruktor dict()
tworzy płytką kopię. Aby wykonać głęboką kopię, zobacz moduł copy
.
Zauważ, że robienie kopii dla każdego dict del
/assignment/etc. oznacza, że przechodzisz z czasu stałego do czasu liniowego, a także używasz przestrzeni liniowej. Dla małych dykt, to nie jest problem. Ale jeśli planujesz zrobić wiele kopii dużych dicts, prawdopodobnie chcesz inną strukturę danych, taką jak HAMT (jak opisano w ta odpowiedź).
Deklaracja del jest tym, czego szukasz'. Jeśli masz słownik o nazwie foo z kluczem o nazwie 'bar', możesz usunąć 'bar' z foo w ten sposób:
del foo['bar']
Zauważ, że to trwale modyfikuje słownik, na którym jest wykonywana operacja. Jeśli chcesz zachować oryginalny słownik, musisz wcześniej utworzyć jego kopię:
>>> foo = {'bar': 'baz'}
>>> fu = dict(foo)
>>> del foo['bar']
>>> print foo
{}
>>> print fu
{'bar': 'baz'}
Wywołanie dict
tworzy płytką kopię. Jeśli chcesz mieć głęboką kopię, użyj copy.deepcopy
.
Tutaj'jest metoda, którą możesz skopiować & wkleić, dla twojej wygody:
def minus_key(key, dictionary):
shallow_copy = dict(dictionary)
del shallow_copy[key]
return shallow_copy