我有以下问题:在输入参数列表的循环中,我为每个列表条目调用API。然后,我想将结果写入dict,并将该dict附加到输出列表中。在循环结束时,我想打印输出列表。发生的情况是,每次我附加到输出列表时,输入参数列表中的最后一个API调用/最后一个元素都会被覆盖。
import requests
input_parameters = ['A', 'B', 'C', 'D']
output = []
record = {}
for input in input_parameters:
r=requests.get("https://api.domain.com/v2/param=" + str(input))
record['id'] = str(r.json()['data'][0]['id'])
record['descr'] = str(r.json()['data'][0]['descr'])
record['qty'] = str(r.json()['data'][0]['qty'])
output.append(record)
print(output)
我得到的输出:
[{'id': 'D', 'descr': 'foobar', 'qty': '10'}, {'id': 'D', 'descr': 'foobar', 'qty': '10'}, {'id': 'D', 'descr': 'foobar', 'qty': '10'}, {'id': 'D', 'descr': 'foobar', 'qty': '10'}]
我想要的输出:
[{'id': 'A', 'descr': 'barfoo', 'qty': '50'}, {'id': 'B', 'descr': 'bar or foo', 'qty': '80'}, {'id': 'C', 'descr': 'foo foo bar', 'qty': '25'}, {'id': 'D', 'descr': 'foobar', 'qty': '10'}]
非常感谢你的帮助。
output.append(record)
不复制record
。因此,当您执行record['id'] = str(r.json()['data'][0]['id'])
时,原始,将修改一个且唯一的record
。
由于只有一个record
对象,因此连续调用output.append(record)
将用对同一字典对象的引用填充output
。
您可以每次创建一个新字典:
record = {
'id': str(r.json()['data'][0]['id']),
'descr': str(r.json()['data'][0]['descr'])
'qty': str(r.json()['data'][0]['qty'])
}
或者用output.append(record.copy())
复制字典。在任何情况下,您都需要为input_parameters
的每个元素都有一个新的dictionary对象。