2016-12-15 180 views
2

我有這個程序創建字典鍵Python中的動態變量在for循環

dict1={ 
     'x':1, 
     'y':[10,20] 
    } 

    for each in list(dict1.keys()): 
     exec(each=dict1["each"]) 
#exec('x=dict["x"]') 
#exec('y=dict["y"]') 
print(x) 
print(y) 

我真正想要的是這個

exec('x=dict1["x"]') ##commented part 
exec('y=dict1["y"]') ##commented part 

無論我在評論部分我做我想做的事in for loop.so,那預計輸出應該是

1 
[10,20] 

但它給錯誤。 想要創建字典鍵作爲變量和值作爲變量值。 但沒有鎖定。任何人都可以請建議我如何實現,或者這是不可能的?

+0

你能解釋一下你正在試圖做的好一點呢? –

+1

你想用詞典中的變量來填充全局名稱空間,變量名是由字典鍵定義的嗎?聽起來很糟糕。看到這個問題的可能替代品 - http://stackoverflow.com/questions/2597278/python-load-variables-in-a-dict-int-namespace –

回答

1

根據這些變量的使用範圍,您可以使用globals()或locals()而不是exec。

例使用全局變量()

>>> x 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'x' is not defined 
>>> 
>>> y 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'y' is not defined 
>>> 
>>> dict1={ 
...   'x':1, 
...   'y':[10,20] 
... } 
>>> dict1 
{'y': [10, 20], 'x': 1} 
>>> for k in dict1: 
... globals()[k] = dict1[k] 
... 
>>> x 
1 
>>> y 
[10, 20] 
>>> 

例用當地人()

>>> x 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'x' is not defined 
>>> y 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'y' is not defined 
>>> dict1={ 
...   'x':1, 
...   'y':[10,20] 
... } 
>>> dict1 
{'y': [10, 20], 'x': 1} 
>>> for k in dict1: 
... locals()[k] = dict1[k] 
... 
>>> x 
1 
>>> y 
[10, 20] 
>>> 
3

你想要的是

for each in dict1.keys(): 
    exec(each + "=dict1['" + each +"']") 

這是否是想要好東西是另外一個問題。

+0

謝謝它的工作! –