2

ループ内の別の辞書でリストを埋めるときに問題が発生しました:

辞書のいくつかの値を変更すると、リストは常に最新の辞書変更の値を取得します...理由がわかりません。

これが私のコードの一部です:

l = []
for k in dData.keys():
    baseCourbe['name'] = k
    baseCourbe['dataPoints'] = dData[k]
    l.append(baseCourbe)

私のリストlは常に に最後に割り当てられた値を取りますbaseCourbe

どんな助けでも大歓迎です!

4

2 に答える 2

1

同じ辞書を使用して、何度も変更しています。まるであなたがこれをしていたかのようです:

>>> d = {'sup': 100}
>>> l = [d, d, d, d]
>>> l
[{'sup': 100}, {'sup': 100}, {'sup': 100}, {'sup': 100}]
>>> l[0]['nom'] = 12
>>> l
[{'nom': 12, 'sup': 100}, {'nom': 12, 'sup': 100}, {'nom': 12, 'sup': 100}, {'nom': 12, 'sup': 100}]

辞書を別のものにしたい場合は、それらをコピーする必要があります。

>>> d = {'sup': 100}
>>> l = [dict(d), dict(d), dict(d), dict(d)]
>>> l
[{'sup': 100}, {'sup': 100}, {'sup': 100}, {'sup': 100}]
>>> l[0]['nom'] = 12
>>> l
[{'nom': 12, 'sup': 100}, {'sup': 100}, {'sup': 100}, {'sup': 100}]

コードのコンテキストでは、おそらく次のようなものが必要です。

l = []
for name, points in dData.items():
    baseCopy = dict(baseCourbe)
    baseCopy['name'] = name
    baseCopy['dataPoints'] = points
    l.append(baseCopy)
于 2013-10-10T15:56:39.227 に答える
1

に追加baseCourbeするl場合、実際に追加しているのは への参照baseCourbeです。したがって、 を変更するbaseCourbeと、その変更は の値にも反映されlます。

例えば:

>>>test = {"a":1}
>>>test[2] = 5
>>>l = []
>>>l.append(test)
>>>print l
[{'a': 1, 2: 5}]
>>>test[5] = "abcd"
>>>print l
[{'a': 1, 2: 5, 5: 'abcd'}]
于 2013-10-10T16:00:50.840 に答える