将索引列表元素作为Python中字典的键值传递

时间:2016-07-11 17:59:14

标签: python dictionary

我是 python 的新手,我正在尝试使用string.format()将列表的索引元素作为我字典的键值传递。然后,这将用于request

更具体地说,对此的总体思路是客户选择/说出列表的输入。这个列表会随着说出的话语而变化,然后将它的元素传递给request.get的填充参数。这将获取它随后将发送到数据库的信息,因此它需要灵活;这就是为什么我不希望显式指定传递的字符串元素,而是希望在列表中使用它们的索引位置。我包括这个因为除了requests以外我可以做其他方法,但我不确定如何。这是我的代码:

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

因为我知道问题出在哪里,所以我尝试在print(intent)下方输入intent来查看正在发生的事情,但这无济于事;执行时我什么都没得到。有没有更容易(和合法)的方法来做到这一点?

2 个答案:

答案 0 :(得分: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 = ['value1', 'value2', 'value3']
>>> intent = dict(zip(['string1', 'string2', 'RelString'], query))
>>> intent
{'RelString': 'value3', 'string2': 'value2', 'string1': 'value1'}
>>> 

['string1', 'string2', 'RelString']的顺序必须与query内的值顺序相对应。

答案 1 :(得分:0)

如果我理解你的问题。以下应该是" intent"的期望输出值。格式化后:

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

我确实编辑了你的"意图"字典以匹配格式化结果。