2016-07-28 17 views
0

Ich habe eine kleine Demo eines komplexeren Problemassign Werte von Variablen in Python zur Liste

def f(a): 
    return tuple([x for x in range(a)]) 

d = {} 
[d['1'],d['2']] = f(2) 
print d 
# {'1': 0, '2': 1} 
# Works 

nun die Schlüssel programmatisch erzeugt
annehmen gemacht Wie kann ich für diesen Fall das Gleiche erreichen?

n = 10 
l = [x for x in range(n)] 
[d[x] for x in l] = f(n) 
print d 
# SyntaxError: can't assign to list comprehension 
+3

Verwenden Sie eine Schleife ......... –

+2

'{i + 1: i für i in f (n)}' –

+0

Was ist Ihr erwartetes Ergebnis? –

Antwort

1

Sie können nicht, es ist eine syntaktische Funktion der Zuweisungsanweisung. Wenn Sie etwas Dynamisches machen, wird es eine andere Syntax verwenden und somit nicht funktionieren.

Wenn Sie irgendeine Funktion haben Ergebnisse f() und eine Liste von Schlüsseln keys, können Sie zip verwenden, um eine iterable von Schlüsseln und Ergebnisse zu schaffen, und eine Schleife über sie:

d = {} 
for key, value in zip(keys, f()): 
    d[key] = value 

, die leicht als dict neu geschrieben Verständnis:

d = {key: value for key, value in zip(keys, f())} 

Oder in diesem speziellen Fall, wie durch @JonClements erwähnt, auch als

d = dict(zip(keys, f())) 
+3

Oder ... 'd = dict (zip (keys, f()))' –

+0

Danke, bearbeitet. – RemcoGerlich