2017-01-03 4 views
-1

Я новичок в Python и пытаюсь создать новую структуру из json respones. Два ответа json - это тесты, которые поступают из двух сред, но имеют одинаковую длину и порядок, только разные результаты, для краткости я просто упростил свой пример.Zipping два списка словарей

response1.json

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

response2.json

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

create.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'] 
+0

Я думаю ** respones1.json ** не действует в формате JSON. – linusg

+0

отредактировал извините за то, что – teddybear123

+0

исправлено извините за это снова – teddybear123

ответ

0
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)] 
+0

@linusg ** НЕТ ** Не перезаписывайте встроенный конструктор списков! – DyZ

+0

Конечно нет! Был просто c'n'p из OP ... – linusg

1

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 
+0

Не работает в 3.4: синтаксическая ошибка в '[{** x'. (BTW, нет необходимости вызывать 'list()'). – DyZ

+0

@DYZ, Не могу согласиться с этим. 'Python 3.5.2 (v3.5.2: 4def2a2901a5, 25 июня 2016, 22:18:55) [MSC v.1900 64 бит (AMD64)] на win32 Введите« помощь »,« авторское право »,« кредиты »или «лицензия» для получения дополнительной информации. >>> data1 = [{"qa": "o"}, {"qa": "o"}] >>> data2 = [{"prod": "x"}, {"prod": " x "}] >>> >>> new_struct = [{** x, ** y} для x, y в списке (zip (data1, data2))] >>> print (new_struct) [{ 'qa': 'o', 'prod': 'x'}, {'qa': 'o', 'prod': 'x'}] >>> ' – RomanPerekhrest

+0

Извините, 3.4. >>> new_struct = [{** x, ** y} для x, y в списке (zip (data1, data2))] Файл «», строка 1 new_struct = [{** x, ** y } для x, y в списке (zip (data1, data2))] ^ СинтаксисError: недействительный синтаксис – DyZ

Смежные вопросы