2011-08-10 20 views
0

これは本当にシンプルなようですが、私は何が間違っているのか分かりません。python append + + dictとの問題

d1 = dict(zip(range(10), [[]]*10)) 
l1 = zip(range(10), range(10,20)) 

for pair in l1: 
    d1[pair[0]].append(pair) 

結果D1:これで

>>> d1 
{0: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 1: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 2: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 3: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 4: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 5: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 6: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 7: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 8: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)], 9: [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)]} 

for pair in l1: 
    d1[pair[0]] += [pair] 

同じことが、とは:

for pair in l1: 
    d1[pair[0]] = d1[pair[0]] + [pair] 

それは私

で望ましい結果を提供します

私はシンタックスで何か基本的なことを忘れていますが、親切に指摘できますか? 感謝〜

アレックス

答えて

5

可変オブジェクトとの乗算を使用しないでください。これは、Xの異なるオブジェクトではなく、オブジェクトへのX参照を提供します。

d1 = dict((idx, []) for idx in range(10)) 
3

代わりの[[]]*10、あなただけの単一の配列参照を指す要素のリストを作る最初の一人として

[[] for i in range(10)] 

を使用する必要があります。

>>> d1 = dict(zip(range(10), [[] for i in range(10)])) 
>>> l1 = zip(range(10), range(10,20)) 
>>> 
>>> for pair in l1: 
...  d1[pair[0]].append(pair) 
... 
>>> d1 
{0: [(0, 10)], 1: [(1, 11)], 2: [(2, 12)], 3: [(3, 13)], 4: [(4, 14)], 5: [(5, 1 
5)], 6: [(6, 16)], 7: [(7, 17)], 8: [(8, 18)], 9: [(9, 19)]} 
>>> 
>>> d1 
{0: [(0, 10)], 1: [(1, 11)], 2: [(2, 12)], 3: [(3, 13)], 4: [(4, 14)], 5: [(5, 1 
5)], 6: [(6, 16)], 7: [(7, 17)], 8: [(8, 18)], 9: [(9, 19)]}