libb.flatten

flatten(kv, prefix=None)[source]

Flatten a dictionary, recursively flattening nested dicts.

Unlike more_itertools.flatten, this operates on dictionaries rather than iterables. It recursively flattens nested dict keys by joining them with underscores (e.g., {'a': {'b': 1}} becomes ('a_b', 1)), whereas more_itertools.flatten removes one level of nesting from a list of lists.

Parameters:
  • kv (dict) – Dictionary to flatten.

  • prefix (list) – Internal prefix list for recursion (do not set manually).

Yields:

Tuples of (flattened_key, value).

Example:

>>> data = [
...     {'event': 'User Clicked', 'properties': {'user_id': '123', 'page_visited': 'contact_us'}},
...     {'event': 'User Clicked', 'properties': {'user_id': '456', 'page_visited': 'homepage'}},
...     {'event': 'User Clicked', 'properties': {'user_id': '789', 'page_visited': 'restaurant'}}
... ]
>>> from pandas import DataFrame
>>> df = DataFrame({k:v for k,v in flatten(kv)} for kv in data)
>>> list(df)
['event', 'properties_user_id', 'properties_page_visited']
>>> len(df)
3