2016-07-11 4 views
0

私はPythonに新しく、string.format()を使用してリストのインデックス付き要素を辞書のキー値として渡そうとしています。これはrequestで使用されます。インデックス付きリスト要素をPythonの辞書のキー値として渡す

具体的には、リストの入力がクライアントによって選択/発言されるということです。発声に応じて変化するこのリストには、request.getのパラメータを満たす要素が渡されます。これは、データベースに送信する情報を取得するので、柔軟にする必要があります。これは、渡された文字列要素を明示的に指定したくないため、リスト内のインデックス付きのプレースメントを使用するためです。これを含めるには、requests以外の方法がありますが、どうすればよいか分かりません。ここに私のコードは次のようになります。問題はどこにあるか私が知っているので、私は何が起こっているのを見てもらうためにintentの下print(intent)を入力しようとしましたが、それが解決しない

import requests 

def func(): 
    # query will be populated via spoken utterances; for now it's hard-coded for testing purposes 
    query = ["value1", "value2", "value3"] 
    intent = {'string1': '{0[0]}', 'string2': '{0[1]}', 'RelString': '{0[2]}'}.format(query) 
    url = "http://path-to-cloudobject" 
    r = requests.get(url, params=intent) 
    return r.text 

。私は実行時に何も得られません。これを行う簡単な(そして法的な)方法はありますか?

答えて

2

intentは、dictionaryで、formatメソッドはありません。あなたが代わりにやりたいことは、その辞書のすべての値を適切なクエリフィールドにマップするようにフォーマットすることです。代わりにこれを試してみてください。実際のところ

>>> query = ["value1", "value2", "value3"] 
>>> intent = {'string1': '{0}'.format(query[0]), 'string2': '{0}'.format(query[1]), 'RelString': '{0}'.format(query[2])} 
>>> intent 
{'RelString': 'value3', 'string2': 'value2', 'string1': 'value1'} 
>>> 

を、これはさらにzipを簡素化することができます。

キーの順序は query内部の値の順序に対応している必要があり ['string1', 'string2', 'RelString']
>>> query = ['value1', 'value2', 'value3'] 
>>> intent = dict(zip(['string1', 'string2', 'RelString'], query)) 
>>> intent 
{'RelString': 'value3', 'string2': 'value2', 'string1': 'value1'} 
>>> 

+0

これは、私がやっていたことよりもはるかに理にかなっています。私は実際には、zipを使ってクリーナーにするのが好きです。とにかく) –

0

私はあなたの質問を正しく理解しています。以下は、フォーマット後、「意図」のための所望の出力値である必要があります:

{'string1': 'value1[0]', 'string2': 'value2[1]', 'RelString': 'value3[2]'} 

あなたが実際に

import ast 
query = ["value1", "value2", "value3"] 
intent = {'string1': '{0}[0]', 'string2': '{1}[1]', 'RelString': '{2}[2]'} 
tupleIntent = intent.items() 
listIntent = ast.literal_eval(str(tupleIntent).format(*query)) 
DictIntent = dict(listIntent) 
print DictIntent 

としてタプルを通じて戻って辞書に、文字列の中に辞書を変換することができ、私はあなたの「意図を編集しました"辞書を使用して、フォーマット結果に一致させます。

関連する問題