2017-06-01 114 views
0

我想在另一個字典中使用鍵值對更新字典鍵。兩個庫,我想結合都嵌套到列表:如何根據指定給另一個字典中相同密鑰的值更改字典密鑰?

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但是如果在dictionary1字典的關鍵是在dictionary2的詞典的按鍵,他們應該改變。

所得詞典:

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基於長度迭代dictionary2。所以我想用一個有841個字典(字典1)和一個字典列表53(字典2)的列表來運行它,它只會在字典1退出前轉換字典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}}}}