Flattening Nested Dictionaries with Key Compression
When working with complex data structures in your code, it can often be useful to "flatten" them for easier manipulation. This is particularly true for nested dictionaries, where multiple levels of keys and values can add complexity to your operations. In this article, we'll explore how to flatten a nested dictionary while compressing the keys.
The Problem
Consider the following nested dictionary:
{'a': 1, 'c': {'a': 2, 'b': {'x': 5, 'y': 10}}, 'd': [1, 2, 3]}
The goal is to flatten this dictionary into something like:
{'a': 1, 'c_a': 2, 'c_b_x': 5, 'c_b_y': 10, 'd': [1, 2, 3]}
where the nested keys are compressed to create a single, flattened key.
The Solution
To flatten the nested dictionary, we can use the flatten() function from the collections.abc module. This function can be defined as follows:
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)
Using the Function
To use the flatten() function, simply pass in the nested dictionary as an argument. The function will recursively traverse the dictionary, "flattening" it and compressing the keys.
>>> 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}
As you can see, the flattened dictionary has a single level of keys, with the keys being compressed to incorporate the nesting structure of the original dictionary.
The above is the detailed content of How Can I Flatten a Nested Dictionary and Compress Its Keys in Python?. For more information, please follow other related articles on the PHP Chinese website!