私は基本的なpythonプログラマーなので、質問に対する答えが簡単になることを願っています。辞書を取り、リストに追加しようとしています。辞書は値を変更してから再び追加されますこれを行うたびに、リスト内のすべての辞書の値が、追加されたばかりの辞書と一致するように変更されるようです。
>>> dict = {}
>>> list = []
>>> for x in range(0,100):
... dict[1] = x
... list.append(dict)
...
>>> print list
結果は[{1:1}, {1:2}, {1:3}... {1:98}, {1:99}]
しかし、代わりに私は得た:
[{1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}]
どんな助けも大歓迎です。
copyを追加する必要があります。追加しないと、同じ辞書への参照を何度も繰り返し追加することになります。
yourlist.append(yourdict.copy())
yourdict
とyourlist
;の代わりにdict
とlist
を使用しました。組み込み型をマスクする必要はありません。
ただdict = {}
ループ内。
>>> dict = {}
>>> list = []
>>> for x in range(0, 100):
dict[1] = x
list.append(dict)
dict = {}
>>> print list
ループ外でadict
辞書を作成すると、alist
リストに同じ辞書が追加されます。これは、すべてのコピーが同じ辞書を指し、最後の値{1:99}
毎回。ループ内ですべての辞書を作成するだけで、100種類の辞書が作成されます。
alist = []
for x in range(100):
adict = {1:x}
alist.append(adict)
print(alist)
Zip
とリスト内包表記を使用して、必要なことを行うこともできます。
Dict値を1から開始する場合は、range(1,100)
を使用します
l = [dict(Zip([1],[x])) for x in range(1,100)]