2012-03-04 9 views
2

私は10個の空のdictsのリストの値を追加しました。 次に、の単一の値をリストのdictsの1つに追加しようとします。 しかし、私はそれをリストのすべてのディクテーションに設定したようです。 アイデア私はこれを実装できますか?1つの代入で複数のdictsを更新する

{1: [{1: 0}, {1: 0}, {1: 0}, {1: 0}, {1: 0}, {1: 0}, {1: 0}, {1: 0}, {1: 0}, {1: 0}]} 

として

bids={} 
bids[1]=[{}]*10 
bids[1][0][1]=0 

入札のプリントは、私が期待しながら:

{1: [{}, {1: 0}, {}, {}, {}, {}, {}, {}, {}, {}]} 

答えて

6

[{}]*10同じ辞書オブジェクトへの参照を持つ10のリストを作成します。この1つのインスタンスを操作することによって、変更は明らかにリスト全体に影響します。

代わりに[{} for _ in range(10)]を使用してください。

4
[{}]*10 

は、空の辞書を作成し、その後、そのすべてがその辞書である10個の要素のリストを作成します。コードでは、それはと同等です:

d = {} 
[d, d, d, d, d, d, d, d, d, d] 

あなたはすべてが最初に空に、10の異なる辞書のリストが欲しいです。 list comprehensionを使用

[{}, {}, {}, {}, {}, {}, {}, {}, {}, {}] 

[{} for _ in range(10)] 
0

異なるアプローチではなく、10枚の空のdictsのリストである値で、あなたが望むかであるかもしれないということでしょうコードでは、としてそれを記述します

from collections import defaultdict 

bids={} 
bids[1]=defaultdict(dict) 
bids[1][0][1]=0 

print bids 
# {1: defaultdict(<type 'dict'>, {0: {1: 0}})} 

各値を自動的に別の空の辞書に初期化されます:あなたがそれらをどうする予定のほかに何を計画してどのように応じて、それぞれの値にdictsの辞書を作ることができます初めて参照するときに使用します。辞書はリストのように順序を保持しませんが、それはあなたが多く必要としないものです。そうであっても、必要に応じてキーで並べ替えることができます。

関連する問題