将具有相同键的dicts添加到列表中,而不覆盖Python中的值



我有以下问题:在输入参数列表的循环中,我为每个列表条目调用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对象。

最新更新