2016-11-04 2 views
2

私は以下のようにネストされた辞書を持っています。私は入れ子になった辞書の中のそのキーのための全経路で辞書からキーとその値をポップし、それをリストに入れる必要があります。pythonのネストされた辞書からのパス全体と一緒にキー値をポップアップ

a={'aa': {'1': {'bb':{'2': {'cc' : ['xx', 'yy']}, 
         '3': {'dd' : ['zz', 'yy']}}}, 
     '11': {'bbb':{'22': {'cc': ['xxx', 'yyy']}, 
         '33': {'dd' : ['zz', 'yy']}}}}} 

私はポップ私のコードは以下の通りですこの

lis = [{'aa': {'1': {'bb':{'3': {'dd' : ['zz', 'yy']}, {'aa': {'11': {'bbb':{'33': {'dd' : ['zz', 'yy']}] 

のように評価されたリストを探しています。それはditionaryから値をポップしますが、それをリストに格納することはできません。上記のように、パス全体をポップした値をリストに格納する方法はありますか?

def delete_keys_from_dict(dict_del, lst_keys): 
    for k in lst_keys: 
     try: 
      dict_del.pop(k) 
     except KeyError: 
      pass 
    for v in dict_del.values(): 
     if isinstance(v, dict): 
      delete_keys_from_dict(v, lst_keys)  
    return dict_del  

delete_keys_from_dict(a, ['dd']) 

答えて

0

私はあなたが辞書から除去しながら。あなたがリストにpoped値を追加することができますpoped値を探していると思います。

a={'aa': {'1': {'bb':{'2': {'cc' : ['xx', 'yy']}, 
          '3': {'dd' : ['zz', 'yy']}}}, 
      '11': {'bbb':{'22': {'cc': ['xxx', 'yyy']}, 
          '33': {'dd' : ['zz', 'yy']}}}}} 

    def delete_keys_from_dict(dict_del, lst_keys,res=[]): 
     for k in lst_keys: 
      try: 
       res.append((k,dict_del.pop(k))) 
      except KeyError: 
       pass 
     for v in dict_del.values(): 
      if isinstance(v, dict): 
       delete_keys_from_dict(v, lst_keys)  
     return dict_del,res 

    result = delete_keys_from_dict(a, ['dd']) 
    print('Updated Dictionary : ' + str(result[0])) 

    print('Deleted : ' + str(result[1])) 

OutputL

Updated Dictionary : {'aa': {'1': {'bb': {'3': {}, '2': {'cc': ['xx', 'yy']}}}, '11': {'bbb': {'22': {'cc': ['xxx', 'yyy']}, '33': {}}}}} 

Deleted : [('dd', ['zz', 'yy']), ('dd', ['zz', 'yy'])] 
+0

リストには、デフォルト値を設定すべきではない、delete_keys_from_dict' 'への複数の呼び出しは、間違った結果を返します。 –

+0

@himanshu削除されたキーのパス全体を{'aa':{'1':{'bb':{'3':{'dd':['zz'、 'yy ']}? – Alex

関連する問題