2017-06-01 7 views
0

別の辞書のキー値のペアを使用して辞書キーを更新しようとしています。私は結合しようとしている2つの辞書は、両方のリストの中にネストされています:別の辞書の同じキーに指定された値に基づいて辞書キーを変更する方法?

dictionary1 = [{ '32639': {'78549': {'526' : { 'sum': 8930.40, 'min' : 2380, 'max': 74839}}}} , {'89304': {'20384': {'152' : { 'sum': 51235.20, 'min' : 4512, 'max': 362.69}}}}, { '41526': {'45315': {'364' : { 'sum': 8985.65, 'min' : 3632.32, 'max': 4558.15}}}}] 

dictionary2 = [{'32639':'90283'}, {'49034': '89203'}, {'28942': '39024'}, {'41526':'24903'} ] 

私はdictionary1内の辞書のキーはdictionary2彼らの辞書のキーである場合に結果として辞書はしかし、正確にdictionary1に見えるようにしたいです変更する必要があります。

結果の辞書:私が試みた

new_dictionary = [{ '90283': {'78549': {'526' : { 'sum': 8930.40, 'min' : 2380, 'max': 74839}}}} , {'89304': {'20384': {'152' : { 'sum': 51235.20, 'min' : 4512, 'max': 362.69}}}}, { '24903': {'45315': {'364' : { 'sum': 8985.65, 'min' : 3632.32, 'max': 4558.15}}}}] 

list1 = [] 
for d1, d2 in zip(dictionary1, dictionary2): 
    for key, value in d1.iteritems(): 
     new_dict = {} 
     if key in d2: 
      new_dict[d2[key]] = value 
      list1.append(new_dict) 
     else: 
      new_dict[key] = value 
      list1.append(new_dict) 

それはそれはしかし働き、このサンプルデータ、プログラム上の長さに基づいてdictionary1を通じてのみ繰り返し処理を動作していないしかし、辞書2。だから私は841の辞書(辞書1)と53の辞書(辞書2)のリストを持つリストでこれを実行しようとしており、それは終了する前に辞書1の最初の53のキーを変換するだけです。

答えて

0

このような何か試してみてください:私は出力を得た

ds1 = [{ '32639': {'78549': {'526' : { 'sum': 8930.40, 'min' : 2380, 'max': 74839}}}} , {'89304': {'20384': {'152' : { 'sum': 51235.20, 'min' : 4512, 'max': 362.69}}}}, { '41526': {'45315': {'364' : { 'sum': 8985.65, 'min' : 3632.32, 'max': 4558.15}}}}] 

ds2 = [{'32639':'90283'}, {'49034': '89203'}, {'28942': '39024'}, {'41526':'24903'} ] 

def trans(ds1, ds2): 
    for d1 in ds1: 
     for d2 in ds2: 
      ckeys = d1.keys() & d2.keys() 
      ukeys = d1.keys() - d2.keys() 
      for ck in ckeys: 
       yield (d2[ck], d1[ck]) 
      for uk in ukeys: 
       yield (uk, d1[uk]) 
print(dict(trans(ds1, ds2))) 

を:

{'90283': {'78549': {'526': {'sum': 8930.4, 'min': 2380, 'max': 74839}}}, '32639': {'78549': {'526': {'sum': 8930.4, 'min': 2380, 'max': 74839}}}, '89304': {'20384': {'152': {'sum': 51235.2, 'min': 4512, 'max': 362.69}}}, '41526': {'45315': {'364': {'sum': 8985.65, 'min': 3632.32, 'max': 4558.15}}}, '24903': {'45315': {'364': {'sum': 8985.65, 'min': 3632.32, 'max': 4558.15}}}}

関連する問題