2012-02-29 16 views
1

私は整数キーを使用して辞書を持ち、各キーの値は整数キーと整数のセットを値として持つマップです。ネストされた辞書をコピーする

例:

x = { 
    3 : {0:set([1,2,5]), 1:set([3]), 2:set([7,8])}, 
    4 : {0:set([1,2]), 1:set([4]), 2:set([7])}, 
    } 

私は、次の操作を行う関数を記述しようとしています:x(たとえば2)の各値に存在するキー(K)を考えると

、それは

  • キー(T):k
  • 下にあるすべての値の和集合の要素と同様の構造と次のプロパティを持つ新しい辞書を返す必要があります
  • 値:同じインナーキーを持つ辞書が、引数場合、所与のインナーキー(k')の値は、上記の例でT in x[k]

を有する古い辞書にk'に関連付けられたすべての集合の和集合であります

y = { 
    7 : {0:set([1,2,5]), 1:set([3,4]), 2:set([7])}, 
    8 : {0:set([1,2,5]), 1:set([3]), 2:set([8])}, 
    } 

を私は現在、古い辞書でkの下にあるすべての可能な値を反復し、新しいものを構築することにより、これをやっている:k=2は、それは返す必要があります。これを行う効率的な方法はありますか?

+0

宿題のようなにおいがしますか? –

+0

@ ^そうではありません...私が実際のコードを提供していないのは、現在のコードが、私が現在携わっているプロジェクトの不必要な詳細をたくさん含んでいることです。 – Graddy

+1

あなたの例を整理しようとしました間違っている) - 今は正しいのですか? –

答えて

4

deepcopycopyモジュールを使用できるように、オブジェクトのコピーを作成する必要があります。詳細はhttp://docs.python.org/library/copy.html#copy.deepcopyをご確認ください。これにより、すべてのオブジェクトと基本データがコピーされます。

+1

新しいdictオブジェクトを作成する場合は、古いものをコピーしません。新しいdictオブジェクトを作成するだけです。 –

関連する問題