2012-10-25 17 views
30

Ich möchte eine Funktion auf alle Werte in dict anwenden und diese in einem separaten dict speichern. Ich versuche nur, um zu sehen, wie ich mit Python spielen kann und wollen zu sehen, wie ich so etwas wie dieseEine Funktion auf Werte in dict anwenden

for i in d: 
    d2[i] = f(d[i]) 

um so etwas wie

d2[i] = f(d[i]) for i in d 

Den ersten Weg, es zu schreiben, ist natürlich in Ordnung umschreiben kann , aber ich bin versucht, Figur, wie Python Syntax

Antwort

45

geändert werden können, wenn Sie Python 2.7 oder 3.x verwenden:

d2 = {k: f(v) for k, v in d1.items()} 

, die gleich ist:

d2 = {} 
for k, v in d1.items(): 
    d2[k] = f(v) 

Ansonsten:

d2 = dict((k, f(v)) for k, v in d1.items()) 
+11

+1. Beachten Sie, dass dies ein neues Wörterbuch 'd2' erstellt, anstatt eines an Ort und Stelle zu ändern. Aber das ist fast immer das, was Sie eigentlich tun wollen. Wenn Sie "d2" wirklich aktualisieren müssen, können Sie 'd2.update ({k: f (v) für k, v in d1.items()})' 'tun. – abarnert

+0

mit 3.x und der zweite Ansatz funktioniert gut. genau das was ich gesucht habe. danke – chrise

+0

danke für deinen Kommentar abarnert. Ich muss in diesem Fall ein neues Diktat erstellen, aber gut für andere Fälle. Vielen Dank – chrise

4
d2 = dict((k, f(v)) for k,v in d.items()) 
3

Wörterbücher können d2 = {k: f(v) for k, v in d1.items()} in Python und in diesem Fall die Lösung verschachtelt werden nicht funktionieren.

Für verschachtelte Wörterbücher braucht man eine Funktion, um die gesamte Datenstruktur zu transversieren. wenn Werte Zum Beispiel dürfen sich Wörterbücher sein, kann man eine Funktion wie definieren:

def myfun(d): 
    for k, v in d.iteritems(): 
    if isinstance(v, dict): 
     d[k] = myfun(v) 
    else: 
     d[k] = f(v) 
    return d 

Und dann

d2 = myfun(d) 
Verwandte Themen