0

以下のように、最後の r が出力されないのはなぜ[{'k': 1}, {'k': 2}]ですか?

l = [1, 2]
d = {}
r = []

for el in l:
    d['k'] = el
    print '> ' + str(d)
    r.append(d)

print r  

出力:

> {'k': 1}
> {'k': 2}
[{'k': 2}, {'k': 2}]

追加操作の前に希望どおりに出力されますが、辞書がリストに追加された後、最後の要素を繰り返し追加するのはなぜですか?

4

2 に答える 2

3

ループを 2 回目に通過するときに、同じキーに新しい値を割り当てています。

for el in l:
    d['k'] = el
    print '> ' + str(d)
    r.append(d)

print r  

ループを初めて通過するのelは です1d['k']に設定して1印刷します。次にd、 に追加されrます。

ループの 2 回目elは です2d['k']-- まったく同じ辞書のまったく同じキーのまったく同じ値 -- が に設定され2ます。次に、まったく同じ辞書dが に追加されrます。

rは君が言った通りだ

r = [d, d]

そしてd['k']今から、リスト内の2両方の参照は を生成します。dr{'k': 2}

異なるものにしたい場合は、ループのたびに新しい辞書を作成する必要があります。

于 2012-04-24T03:58:05.953 に答える
0

あなたはほとんどそこにいました。これには、マイナーな修正が必要です。

l = [1, 2]
r = []

for el in l:
    d = {}
    d['k'] = el
    print '> ' + str(d)
    r.append(d)

print r 

思考の糧として、リスト内包表記を使用してそれを行うためのもう少し高度な方法があります:

>>> [{'k': el} for el in [1, 2]]
[{'k': 1}, {'k': 2}]
于 2012-04-24T04:17:58.963 に答える