0

私はcouchdbとcouchappのみを使用してWebを作成しようとしています...
しかし、何らかの理由でPythonを使用した外部プロセスが必要です..
そして今、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 では、post 変数の処理方法がこのようになっているためです。req["form"]["var1"]

4

3 に答える 3

4

ローカル (非推奨) またはグローバル ディクショナリをデータ ディクショナリで更新してみてください。

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

これを安全な方法で行うには、グローバル ディクショナリを更新するデータのソースを信頼して、ビルトインの置き換えやその他の変なコード インジェクションを回避する必要があります。

于 2011-05-03T10:05:35.827 に答える
2

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
于 2011-05-03T10:23:02.257 に答える
1

これを安全に行うために、私は次のようなものを提案します:

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

for k,v in a["data"].iteritems():
    if k in allowed_variables:
        locals.update({k:v})
于 2011-05-03T13:03:53.973 に答える