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

0 コメント