如何将列表与字典和外部值结合起来以允许循环



我很难在标题中解释,但我有两个字典data的列表,我想通过for循环或其他迭代器根据索引插入thingsstuff

这是我所拥有的:

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}]

我建议使用enumeratezip:

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'}]

相关内容

最新更新