問題
id、x、y 座標を持った辞書型を羅列した リストを作りたいと思っています。
以下のようなレイアウトの dict を羅列したリスト items を作成したいです。
そして、それをjsonで保存したいです。
x, y は連番、 id は x*10 + y とします。
python
1template = { 2 'id': id, # ID (x*10 + y) が入る 3 'position': { 4 'x': x, # x 座標が入る 5 'y': y # y 座標が入る 6 } 7}
実現したいこと
json
1[ 2 { 3 "id": 00, 4 "position": { 5 "x": 0, 6 "y": 0 7 } 8 }, 9 { 10 "id": 01, 11 "position": { 12 "x": 0, 13 "y": 1 14 } 15 }, 16...
発生している問題
x, y を 4までの連番とした場合、次のようになってしまいます。
ループ終了時の値がリストのすべての要素にappendされてしまっているように見えます。
json
1[ 2 { 3 "id": 44, 4 "position": { 5 "x": 4, 6 "y": 4 7 } 8 }, 9 { 10 "id": 44, 11 "position": { 12 "x": 4, 13 "y": 4 14 } 15 }, 16...
該当のソースコード
上の問題が発生するソースコードが次のとおりです。
python
1import json 2 3template = { 4 'id': '', 5 'position': {} 6} 7 8items = [] 9 10for i in range(4): 11 for j in range(4): 12 id = i*10 + j 13 x = i 14 y = j 15 elm = template 16 elm['id'] = id 17 elm['position'].update({'x': x}) 18 elm['position'].update({'y': y}) 19 items.append(elm) 20 21with open('export.json', mode='w', encoding='utf-8') as f: 22 json.dump(items, fp=f)
試したこと
変数 の id を意識して書き換えた
appendした後に中身が変わってしまったのかと思い、elm = dict(elm)
、ループの最後にdel elm
としたりしてみましたが変化がありませんでした。
補足情報(FW/ツールのバージョンなど)
Python 3.10.6
ご教示よろしくお願い致します。