Python 配列の要素にforでカウントアップしたdict型を入れる
概要
配列の要素にforでカウントアップしたdict型を入れる
問題
最初は下記のソースではカウントアップさせた最後のdict型のみしか出力されなかった。
import json def lambda_handler(event, context): # TODO implement array_list = [] sample_dict = {} sample_dict["Name"] = "Yamada" sample_dict["Address"] = "Tokyo" for nm in [1,2,3,4]: sample_dict["No"] = nm array_list.append(sample_dict) return array_list
下記、出力結果。Noの要素がすべて4になってしまってる。
[ { "Name": "Yamada", "Address": "Tokyo", "No": 4 }, { "Name": "Yamada", "Address": "Tokyo", "No": 4 }, { "Name": "Yamada", "Address": "Tokyo", "No": 4 }, { "Name": "Yamada", "Address": "Tokyo", "No": 4 } ]
解決策
下記のようにappendで渡すdict型にcopy()を使用すると解決しました。
import json def lambda_handler(event, context): # TODO implement array_list = [] sample_dict = {} sample_dict["Name"] = "Yamada" sample_dict["Address"] = "Tokyo" for nm in [1,2,3,4]: sample_dict["No"] = nm array_list.append(sample_dict.copy()) return array_list
下記、出力結果
[ { "Name": "Yamada", "Address": "Tokyo", "No": 1 }, { "Name": "Yamada", "Address": "Tokyo", "No": 2 }, { "Name": "Yamada", "Address": "Tokyo", "No": 3 }, { "Name": "Yamada", "Address": "Tokyo", "No": 4 } ]