2016-12-15 2 views
2

Я имею эту программусоздавать динамические переменные в питона из ключей словаря в цикл

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] 

, но оно дает ошибку. хотел создать ключи dictionay как переменные и значения как значения varialbe. но нет блокировка. может ли кто-нибудь предложить мне, как этого добиться, или это невозможно?

+0

Можете ли вы объяснить, что вы пытаетесь сделать немного лучше? –

+1

Вы хотите заполнить глобальное пространство имен переменными из словаря с именами переменных, определяемыми клавишами словаря? Звучит плохо. См. Этот вопрос для возможных альтернатив - http://stackoverflow.com/questions/2597278/python-load-variables-in-a-dict-into-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

спасибо, что это сработало !!! –

Смежные вопросы