我很难在标题中解释,但我有两个字典data
的列表,我想通过for循环或其他迭代器根据索引插入things
和stuff
。
这是我所拥有的:
things = ['7121703099311426821', '7114869117433154821', ]
stuff = ['fjfueirjk', 'aoiwhef', ]
data = [{'data1': 1009, 'data2': 52, 'data3': 43, 'data4': 45000}, {'data1': 115, 'data2': 7, 'data3': 9, 'data4': 1814}]
我希望它们是这样的:
data = {'id1':7121703099311426821, 'stuff: 'fjfueirjk', 'data1': 1009, 'data2': 52, 'data3': 43, 'data4': 45000}, {'id1':7114869117433154821, 'stuff': 'aoiwhef', 'data1': 115, 'data2': 7, 'data3': 9, 'data4': 1814}
所以我可以说
for x in data:
print(x['id1'])
print(x['stuff'])
print(x['data1'])
# do stuff
一种方法,IIUC:
res = [{ "id" : thing, "stuff" : s, **d} for thing, s, d in zip(things, stuff, data)]
print(res)
[{'id': '7121703099311426821', 'stuff': 'fjfueirjk', 'data1': 1009, 'data2': 52, 'data3': 43, 'data4': 45000}, {'id': '7114869117433154821', 'stuff': 'aoiwhef', 'data1': 115, 'data2': 7, 'data3': 9, 'data4': 1814}]
我建议使用enumerate
和zip
:
things = ['7121703099311426821', '7114869117433154821', ]
stuff = ['fjfueirjk', 'aoiwhef', ]
data = [{'data1': 1009, 'data2': 52, 'data3': 43, 'data4': 45000}, {'data1': 115, 'data2': 7, 'data3': 9, 'data4': 1814}]
for idx, item in enumerate(zip(things, stuff)):
data[idx]["id1"] = item[0]
data[idx]["stuff"] = item[1]
print(data)
输出[{'data1': 1009, 'data2': 52, 'data3': 43, 'data4': 45000, 'id1': '7121703099311426821', 'stuff': 'fjfueirjk'}, {'data1': 115, 'data2': 7, 'data3': 9, 'data4': 1814, 'id1': '7114869117433154821', 'stuff': 'aoiwhef'}]
这允许您显式地查看data
中的新条目是在哪里创建的。
基本实现
things = ['7121703099311426821', '7114869117433154821', ]
stuff = ['fjfueirjk', 'aoiwhef', ]
data = [{'data1': 1009, 'data2': 52, 'data3': 43, 'data4': 45000}, {'data1': 115, 'data2': 7, 'data3': 9, 'data4': 1814}]
new_data = []
if len(things)==len(stuff) and len(things)==len(data): # Just to be sure, that we don't get an out of bounds error
for i in range(len(things)):
element = {}
element[f'id{i+1}'] = things[i]
element['stuff'] = stuff[i]
for k,v in data[i].items():
element[k] = v
new_data.append(element)
data = new_data
print(data)
输出[{'id1': '7121703099311426821', 'stuff': 'fjfueirjk', 'data1': 1009, 'data2': 52, 'data3': 43, 'data4': 45000}, {'id2': '7114869117433154821', 'stuff': 'aoiwhef', 'data1': 115, 'data2': 7, 'data3': 9, 'data4': 1814}]
在python>= 3.9中,可以像合并dict1 | dict2
一样合并两个dict
。
out = [{ "id" : thing, "stuff" : s} | d for thing, s, d in zip(things, stuff, data)]
# ------^^^^^^^^^^dict1^^^^^^^^^^^--^dict2^
print(out)
[
{'id': '7121703099311426821', 'stuff': 'fjfueirjk', 'data1': 1009, 'data2': 52, 'data3': 43, 'data4': 45000},
{'id': '7114869117433154821', 'stuff': 'aoiwhef', 'data1': 115, 'data2': 7, 'data3': 9, 'data4': 1814}
]
如果您不需要字典中键的特定顺序:
things = ['7121703099311426821', '7114869117433154821', ]
stuff = ['fjfueirjk', 'aoiwhef', ]
data = [{'data1': 1009, 'data2': 52, 'data3': 43, 'data4': 45000}, {'data1': 115, 'data2': 7, 'data3': 9, 'data4': 1814}]
for d, d['id1'], d['stuff'] in zip(data, things, stuff):
pass
import pprint
pprint.pp(data)
输出(在线试试!):
[{'data1': 1009,
'data2': 52,
'data3': 43,
'data4': 45000,
'id1': '7121703099311426821',
'stuff': 'fjfueirjk'},
{'data1': 115,
'data2': 7,
'data3': 9,
'data4': 1814,
'id1': '7114869117433154821',
'stuff': 'aoiwhef'}]