压缩两个词典列表

2024-04-28 07:26:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,正在尝试从json响应创建一个新的结构。这两个json响应是来自两个环境的测试,但长度和顺序相同,只是结果不同,为简洁起见,我简化了我的示例。你知道吗

响应1.json

[{"qa":"o"}, {"qa":"o"}]

响应2.json

[{"prod":"x"}, {"prod": "x"}] 

创建.py

with open('response1.json') as data_file:    
    data1 = json.load(data_file)

with open('response2.json') as data_file:    
    data2 = json.load(data_file)

#i want to be able to create a structure like this:
# [{"qa":"o", "prod":"x"},{"qa":"o", "prod":"x"}]

list = []

#This is wrong but was thinking that logic would be close to this.
for i in range(0,len(data1)):
   list[i]['qa'] = data1[i]['qa']

for i in range(0,len(data2)):
   list[i]['prod'] = data[i]['prod']

Tags: tojsondataaswithloadprodbe
2条回答

1)Python 3.5使用zip()函数和字典解包运算符**的解决方案:

data1 = [{"qa":"o"},{"qa":"o"}]
data2 = [{"prod":"x"}, {"prod": "x"}]

new_struct = [{**x, **y} for x,y in zip(data1, data2)]
print(new_struct)

输出:

[{'qa': 'o', 'prod': 'x'}, {'qa': 'o', 'prod': 'x'}]

2)Python<;3.5使用dict.update()方法的解决方案:

new_struct = []
for x,y in zip(data1, data2):
    x.update(y)
    new_struct.append(x)

print(new_struct) # will give the same output
json_list = [dict(list(x[0].items()) + list(x[1].items())) for x in zip(data1,data2)]
print(json_list)

结果:

[{'qa': 'o', 'prod': 'x'}, {'qa': 'o', 'prod': 'x'}]

这里有一个更优雅但可能效率更低的解决方案:

json_list = [dict(sum([list(y.items()) for y in x], [])) 
             for x in zip(data1,data2)]

相关问题 更多 >