私は、Python 2.7.12のこの動作を理解していない...なぜリストの変数の値がPythonで変わるのですか?
以下の貼り付けコード、確認してください:上記の表示されたコードの
test = [(('AAA_1', 'BBB_1', 'CCC_1'), 1), (('AAA_2', 'BBB_2', 'CCC_2'), 2),(('AAA_3', 'BBB_3', 'CCC_3'), 3), (('AAA_4', 'BBB_4', 'CCC_4'), 4)]
for i, j in enumerate(test):
for k, l in enumerate(j[0]):
if k == 0:
dc['first'] = l
elif k == 1:
dc['second'] = l
elif k == 2:
dc['third'] = l
elif k == 3:
dc['fourth'] = l
c.append(dc)
print "/n"
print "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXx"
print dc
print json.dumps(c, indent=1)
print c
print json.dumps(c, indent=1)
結果は公共的なペーストビンに格納されます。http://pastebin.com/GkrTysegを
私にとって奇妙なもの: リストを追加することで:c辞書のリストを受け取りたいと思います。この辞書は、AAA、BBB、CCCタプルの各タイプを表すことができる。私は辞書を使ってこれをjsonに変換して、このデータをWebサービスで簡単に使用できるようにしました。
{
"second": "BBB_1",
"third": "CCC_1",
"first": "AAA_1"
},
{
"second": "BBB_2",
"third": "CCC_2",
"first": "AAA_2"
},
{
"second": "BBB_3",
"third": "CCC_3",
"first": "AAA_3"
},
{
"second": "BBB_4",
"third": "CCC_4",
"first": "AAA_4"
}
しかし、実際の結果は以下のとおりです:
はとにかく、私はJSONを受けることが予想
{
"second": "BBB_4",
"third": "CCC_4",
"first": "AAA_4"
},
{
"second": "BBB_4",
"third": "CCC_4",
"first": "AAA_4"
},
{
"second": "BBB_4",
"third": "CCC_4",
"first": "AAA_4"
},
{
"second": "BBB_4",
"third": "CCC_4",
"first": "AAA_4"
}
以前に追加の値を新しいものにそれらの値を変更するのはなぜ?
list:cの追加辞書の代わりに私が使用したときと同じ結果が得られました。これはlistを使用するよりもきれいなjsonを得るためです。しかし、結果は同じであった... は、私は(リストの代わりに:C):使用してみました
main_dc[i+1] = dc
は、どのように私はリストや辞書の要素の値を変更しないように防ぐことができますか?
'dcはどこから来たのですか?異なる値で同じ辞書を更新し続けます...古いものを上書きします。私は外側のループの各反復で新しいdc dictを作成する必要があると思います。 – tdelaney