как сделать потомком списка переменную в python - PullRequest
0 голосов
/ 03 мая 2011

Я пытаюсь создать сеть, используя только couchdb и couchapp ...
но по какой-то причине мне нужен внешний процесс с использованием Python ..
и теперь я застрял, как обрабатывать переменную post в Python ...

Я прочитал это (и это работает) и это ...

но я хочу вот так:

>>> a = {"success":1,"data":{"var1":1,"var2":2,"var3":3}}
>>> a["data"]["var2"]
2
>>> var2

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    var2
NameError: name 'var2' is not defined
>>> for key, value in a["data"].items():
    print  (key, value)
('var1', 1)
('var3', 3)
('var2', 2)
>>> var1

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    var1
NameError: name 'var1' is not defined
>>> 

я хочу, когда я набираю var2, он возвращает 2
другими словами, как сделать вложенный дочерний объект переменным, когда я не знаю, сколько len данных .. это потому, что во внешнем Python обработка почтовой переменной выглядит так: req["form"]["var1"]

Ответы [ 3 ]

4 голосов
/ 03 мая 2011

Вы должны попытаться обновить свой локальный (не рекомендуется) или глобальный словарь, используя свой словарь данных

>>> a = {"success":1,"data":{"var1":1,"var2":2,"var3":3}}
>>> a["data"]["var2"]
2
>>> locals().update(a["data"])
>>> var2
2

или

>>> globals().update(a["data"])
>>> var2
2

Чтобы сделать это безопасным способом, у вас естьдоверять источнику данных, которыми вы обновляете свой глобальный словарь, чтобы избежать замены встроенных или других забавных инъекций кода.

2 голосов
/ 03 мая 2011

Может использовать оператор python "exec" для построения строки и последующего ее динамического выполнения.

a = {"success":1,"data":{"var1":1,"var2":2,"var3":3}}

for key, value in a["data"].items():
    exec('%s=%s' % (key, value, ))

print 'var1:', var1
print 'var2:', var2
print 'var3:', var3
1 голос
/ 03 мая 2011

Чтобы сделать это безопасно, я бы предложил что-то вроде:

allowed_variables = ('var1', 'var2', 'var3')

for k,v in a["data"].iteritems():
    if k in allowed_variables:
        locals.update({k:v})
...