web-dev-qa-db-ja.com

ネストされたdictをフラット化し、衝突時に内部値を使用する方法

質問

次の辞書の場合:

{'id': 1, 'label': 'hello', 'remove_me': {'world': {'keep_me': 52}}}

remove_meまたはworldキーなしで新しい辞書を作成したいのですが。

更新を編集:

要約すると、私は次のことをしたかった:

アイテムの値がネストされた辞書の場合。メイン辞書から現在のキー値を削除しながら、内部結果で新しい辞書を更新します。

アイテムの値がネストされたディクショナリではない場合、キー、値で新しいディクショナリを更新します。

受け入れられた答えはこれをカバーしています。

私は何を試しましたか?

{k:v for (k,v) in d.items() if not k == 'remove_me'}

利回り:

{'id': 1, 'label': 'hello'}

ネストされたdictを削除するときに必要なものとは異なります。

必要な出力:

{'id': 1, 'label': 'hello','keep_me': 52}
3
ade1e

辞書をフラット化すること自体が重要です。これで目標は達成できましたか? (テストされていない、私は私の電話で入力していますa.t.m.):

def flattenDict(myDict, blacklist):
  returnDict = {}
  for key, val in myDict:
    If isinstance(val, "dict"):
       myDict.update(flattenDict(val))
    Elif key in blacklist:
       continue 
    Elif val in blacklist:
        continue
    returnDict[key] = val
  return returnDict 

cleanDict = flattenDict(myDict, ["remove_me", "world"])
0
astetson