comment faire l'enfant d'une liste devienne une variable en python
-
28-10-2019 - |
Question
Je suis en train de faire une web utilisant uniquement CouchDB et couchapp ...
mais pour une raison que j'ai besoin processus externe en utilisant python ..
et maintenant je suis bloqué comment gérer variable d'après en python ...
cette (et il fonctionne) et cette ...
mais je veux comme ceci:
>>> 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
>>>
je veux, quand je tape var2, il retourne 2
en d'autres termes comment faire l'objet enfant imbriqué devient une variable quand je ne sais pas combien len
les données .. c'est parce que en python externe, la façon de gérer la variable post est comme ce req["form"]["var1"]
La solution
vous devriez essayer de mettre à jour votre Dictionnary local (non recommandé) ou global avec vos données Dictionnary
>>> a = {"success":1,"data":{"var1":1,"var2":2,"var3":3}}
>>> a["data"]["var2"]
2
>>> locals().update(a["data"])
>>> var2
2
ou
>>> globals().update(a["data"])
>>> var2
2
Pour faire cela d'une manière sûre, vous devez faire confiance à la source des données que vous mettez à jour vos globals avec Dictionnary, afin d'éviter le remplacement ou d'autres injections de code drôle de builtin.
Autres conseils
Pourrait utiliser l'instruction python « exec » pour construire une chaîne, puis l'exécuter dynamiquement.
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
Pour ce faire en toute sécurité, je suggère quelque chose comme:
allowed_variables = ('var1', 'var2', 'var3')
for k,v in a["data"].iteritems():
if k in allowed_variables:
locals.update({k:v})