2017-01-03 5 views
-1

私はPythonには新しく、json responesから新しい構造を作成しようとしています。 2つのjsonレスポンスは2つの環境から来たテストですが、同じ長さと順番を持ち、簡単に異なる結果が出ます。辞書の2つのリストを圧縮する

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) 

結果:

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

@linusg ** NO **組み込みリストコンストラクタを上書きしないでください! – DyZ

+0

もちろん、そうではありません! OPからC'n'pだけでした... – linusg

1

1)のPython 3.5zip()機能を使用して解決し、辞書開梱オペレーター**

ここ

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

は、よりエレガントが、おそらくあまり効率的なソリューションです

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

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

出力:dict.update()方法使用

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

2)Pythonの< 3.5ソリューション:

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'。 (ところで、 'list()'を呼び出す必要はありません)。 – DyZ

+0

@DYZ、それに同意できません。 'win32のPython 3.5.2(v3.5.2:4def2a2901a5、Jun 25 2016、22:18:55)[MSC v.1900 64ビット(AMD64)] " help "、" copyright "、" credits "または詳細については、「ライセンス」を参照してください。 >>> DATA1 = [{ "QA": "O"}、{ "QA": "O"}] >>> DATA2 = [{ "PROD": "X"}、{ "PROD": " x "y]リスト内のx、yについて >>> >>> new_struct = [{** x、** y}リスト内のx、y(zip(data1、data2))] >>> print(new_struct) [{x、 'qa': 'o'、 'prod': 'x'}、{'qa': 'o'、 'prod': 'x'}] >>> ' – RomanPerekhrest

+0

申し訳ございません。 >>> new_struct = [{** x、** y}リスト内のx、y(zip(data1、data2))] ファイル ""、行1 new_struct = [{** x、** y } xについて、リスト内のY(ZIP(DATA1、DATA2))]^ にSyntaxError:無効な構文 – DyZ

関連する問題