starałem się zaktualizować wartości w moim słowniku, natknąłem się na 2 sposoby, aby to zrobić:Aktualizacja metoda w słowniku Pythona
product.update(map(key, value))
product.update(key, value)
Jaka jest różnica między nimi?
starałem się zaktualizować wartości w moim słowniku, natknąłem się na 2 sposoby, aby to zrobić:Aktualizacja metoda w słowniku Pythona
product.update(map(key, value))
product.update(key, value)
Jaka jest różnica między nimi?
Różnica polega na tym, że druga metoda nie działa:
>>> {}.update(1, 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: update expected at most 1 arguments, got 2
dict.update()
spodziewa się znaleźć iterowalny par klucz-wartość, argumentów, słów kluczowych, lub innego słownika:
Update the dictionary with the key/value pairs from other, overwriting existing keys. Return
None
.
update()
accepts either another dictionary object or an iterable of key/value pairs (as tuples or other iterables of length two). If keyword arguments are specified, the dictionary is then updated with those key/value pairs:d.update(red=1, blue=2)
.
map()
jest wbudowaną metodą, która tworzy sekwencję przez zastosowanie elementów drugiego (i kolejnych) argumentów do pierwszego argumentu, który musi być możliwy do wywołania. O ile twój obiekt key
nie jest wywoływalny, a obiekt value
jest sekwencją, twoja pierwsza metoda również się nie powiedzie.
Demo sprawnego map()
aplikacji:
>>> def key(v):
... return (v, v)
...
>>> value = range(3)
>>> map(key, value)
[(0, 0), (1, 1), (2, 2)]
>>> product = {}
>>> product.update(map(key, value))
>>> product
{0: 0, 1: 1, 2: 2}
Tutaj map()
tylko produkuje pary klucz-wartość, która spełnia dict.update()
oczekiwania.
dla' map() 'czy mogę użyć' str' jako obiektu wywoływalnego, na przykład: 'dict.update (map ('Name') , "John")) '? –
Nie, nie możesz. Ponieważ obiekty 'str' nie są wywoływalne. Działają tylko funkcje i obiekty z metodą "__call__". –
Jednakże mogę to zrobić: 'dict.update ({'Name': 'John'})' –
Druga metoda zgłasza błąd typu: 'TypeError: update oczekiwano co najwyżej 1 argument, otrzymałem 2'. –
Co jest nie tak z 'product [key] = value'? – Koterpillar
Pierwsza metoda również zgłasza błąd, mówiąc, że drugi parametr ("wartość") musi obsługiwać iterację. – Koterpillar