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"]

Était-ce utile?

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})
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top