2016-07-20 19 views
2

私はネストされた辞書{1: {2: {3: None}}}とネストされた辞書のキーを{1: x, 2: y, 3: z}のような値のセットにマップする辞書を持っています。入れ子になった辞書をこの形式の{x: {y: {z: None}}}に変換したい。私はいくつかの再帰的な機能を試しましたが、私は引き続きサークルに入り、自分自身を混乱させています。これを達成する最良の方法は何ですか?Python:ネストされた辞書のキーを置換する

編集:ネスティングのレベルは任意であることに言及するのを忘れました。上記は単純な例です。

+1

を持っているのですか? –

答えて

1

新しいキーで新しいものを作成するときに、辞書を再帰的に処理する必要があります。あるリストやタプルに他の辞書がある場合は、処理されません。そのためにコードを追加する必要があります。実際には、新しい辞書を作成せずにこれを行うことができますが、この方法は簡単だと思います。

od = { 1: { 2: { 3: None }}} 
kd = { 1: 'x', 2: 'y', 3: 'z' } 

def replace_keys(old_dict, key_dict): 
    new_dict = { } 
    for key in old_dict.keys(): 
     new_key = key_dict.get(key, key) 
     if isinstance(old_dict[key], dict): 
      new_dict[new_key] = replace_keys(old_dict[key], key_dict) 
     else: 
      new_dict[new_key] = old_dict[key] 
    return new_dict 

nd = replace_keys(od, kd) 
print nd 

出力:あなたは、既存のコードを

{'x': {'y': {'z': None}}} 
関連する問題