In Python 2 Ich kann Folgendes tun:Python 3 map Wörterbuch Update-Methode auf eine Liste von anderen Wörterbuch
>> d = {'a':1}
>> extras = [{'b':2}, {'c':4}]
>> map(d.update, extras)
>> d['c']
>> 4
In Python 3 in eine KeyError
erhalten:
>> d = {'a':1}
>> extras = [{'b':2}, {'c':4}]
>> map(d.update, extras)
>> d['c']
>> KeyError: 'c'
Ich mag würde zu erreichen das gleiche Verhalten in Python 3 wie in Python 2.
Ich verstehe, dass Karte in Python 3 wird einen Iterator (Lazy Evaluation und whatnot), die für das Wörterbuch t iteriert werden muss o aktualisiert werden.
Ich hatte angenommen, die d['c']
Schlüsselsuche würde die Karteniteration irgendwie auslösen, was nicht der Fall ist.
Gibt es einen pythonischen Weg, um dieses Verhalten zu erreichen, ohne eine for-Schleife zu schreiben, , die ich im Vergleich zu Karte ausführlich finde.
Ich habe daran gedacht, mit Listenkomprehensionen:
>> d = {'a':1}
>> extras = [{'b':2}, {'c':4}]
>> [x for x in map(d.update, extras)]
>> d['c']
>> 4
Aber es funktioniert nicht pythonic scheinen.
'Liste (Karte (d.update, Extras))' die Iterator zwingen – jonrsharpe
Die pythonic Weise verbraucht werden * ist * eine for-Schleife zu verwenden!Die Verwendung der Karte (oder eines Listenverständnisses) für ihre Nebenwirkungen und nicht ihre Ergebnisse ist definitiv * nicht * pythonisch. –