2016-07-28 42 views
0

变量我做了一个更复杂的问题的一小演示分配值列出的蟒蛇

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 

现在假设键编程产生
我如何实现这种情况下,同样的事情?

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

使用循环........ –

+2

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

+0

您的预期结果是什么? –

回答

1

不能,它是赋值语句的语法特征。如果你做了一些动态的事情,它会使用不同的语法,因此不起作用。

如果你有一些功能导致f()和密钥keys的列表,你可以使用zip在他们创建密钥和结果的迭代,并循环:

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

这是很容易改写为字典理解:

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

或者,在由@JonClements提到,即使

这个特定的情况下,
+3

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

+0

谢谢,编辑。 – RemcoGerlich