2013-07-09 7 views
18

Ich habe versucht, Werte in meinem Wörterbuch zu aktualisieren, stieß ich auf zwei Möglichkeiten, dies zu tun:Update-Methode in Python Wörterbuch

product.update(map(key, value)) 

product.update(key, value) 

Was ist der Unterschied zwischen ihnen?

+2

Die zweite Methode löst einen Typfehler aus: 'TypeError: Update erwartet höchstens 1 Argumente, 2 '. –

+9

Was stimmt nicht mit 'product [key] = value'? – Koterpillar

+2

Die erste Methode löst ebenfalls einen Fehler aus, da der zweite Parameter ("Wert") die Iteration unterstützen muss. – Koterpillar

Antwort

37

Der Unterschied ist, dass die zweite Methode nicht funktioniert:

>>> {}.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() erwartet einen iterable von Schlüssel-Wert-Paaren, Stichwort Argumente zu finden, oder ein anderes Wörterbuch:

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() ist eine integrierte Methode, die eine Sequenz erzeugt, indem sie die Elemente der zweiten (und nachfolgenden) Argumente auf das erste Argument anwendet, das aufrufbar sein muss. Wenn Ihr Objekt key nicht aufrufbar ist und das Objekt value eine Sequenz ist, wird Ihre erste Methode ebenfalls fehlschlagen.

Demo eines Arbeits map() Anwendung:

>>> 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} 

map() Hier erzeugt nur Schlüssel-Wert-Paare, die die dict.update() Erwartungen erfüllt.

+1

für 'map()' kann ich ein 'str' als aufrufbares Objekt verwenden, zum Beispiel:' dict.update (map ('Name' , 'John'))? –

+2

Nein, das geht nicht. Weil 'str'-Objekte nicht aufrufbar sind. Nur Funktionen und Objekte mit einer '__call__' Methode sind. –

+4

Ich kann dies jedoch tun: 'dict.update ({'Name': 'John'})' –