2016-07-28 69 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