キー圧縮によるネストされた辞書のフラット化
コード内で複雑なデータ構造を扱う場合、それらを「フラット化」すると便利なことがよくあります。操作を容易にするため。これは、複数のレベルのキーと値によって操作が複雑になる可能性がある、入れ子になった辞書に特に当てはまります。この記事では、キーを圧縮しながらネストされた辞書をフラット化する方法を検討します。
問題
次のネストされた辞書を考えてみましょう:
{'a': 1, 'c': {'a': 2, 'b': {'x': 5, 'y': 10}}, 'd': [1, 2, 3]}
目標は、この辞書を何かに平坦化することです例:
{'a': 1, 'c_a': 2, 'c_b_x': 5, 'c_b_y': 10, 'd': [1, 2, 3]}
ネストされたキーが圧縮されて、単一のフラット化されたキーが作成されます。
解決策
ネストされた辞書をフラット化するにはでは、collections.abc モジュールの flatten() 関数を使用できます。この関数は次のように定義できます。
def flatten(dictionary, parent_key='', separator='_'): items = [] for key, value in dictionary.items(): new_key = parent_key + separator + key if parent_key else key if isinstance(value, MutableMapping): items.extend(flatten(value, new_key, separator=separator).items()) else: items.append((new_key, value)) return dict(items)
関数の使用
flatten() 関数を使用するには、ネストされた辞書を引数として渡すだけです。この関数は辞書を再帰的に走査し、辞書を「フラット化」してキーを圧縮します。
>>> flatten({'a': 1, 'c': {'a': 2, 'b': {'x': 5, 'y': 10}}, 'd': [1, 2, 3]}) {'a': 1, 'c_a': 2, 'c_b_x': 5, 'd': [1, 2, 3], 'c_b_y': 10}
ご覧のとおり、フラット化された辞書には単一レベルのキーがあり、キーはネストを組み込むために圧縮されています。元の辞書の構造
以上がPython でネストされた辞書をフラット化し、そのキーを圧縮するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。