Module pd3f.utils
Utility functions
Expand source code
"""Utility functions
"""
import json
from collections import Iterable
from collections.abc import Mapping
def update_dict(d, u):
"""Add u's keys to d. Override key in d if existing.
Similar to JavaScript's Object.assign (but changes d inplace as well).
"""
for k, v in u.items():
if isinstance(v, Mapping):
d[k] = update_dict(d.get(k, {}), v)
else:
d[k] = v
return d
def write_dict(d, fn):
"""Write dict to disk
"""
if not type(fn) == str:
fn = str(fn)
with open(fn, "w", encoding="utf-8") as f:
json.dump(d, f, ensure_ascii=False, indent=4)
def flatten(items, keep_dict=False):
"""Yield items from any nested iterable; see Reference.
# https://stackoverflow.com/a/40857703/4028896
keep_dict: do not flatten dicts
"""
if items is None:
return
if keep_dict and isinstance(items, Mapping):
yield items
else:
for x in items:
if (
isinstance(x, Iterable)
and not isinstance(x, (str, bytes))
and (not keep_dict or not isinstance(x, Mapping))
):
for sub_x in flatten(x, keep_dict):
yield sub_x
else:
yield x
Functions
def flatten(items, keep_dict=False)
-
Yield items from any nested iterable; see Reference.
https://stackoverflow.com/a/40857703/4028896
keep_dict: do not flatten dicts
Expand source code
def flatten(items, keep_dict=False): """Yield items from any nested iterable; see Reference. # https://stackoverflow.com/a/40857703/4028896 keep_dict: do not flatten dicts """ if items is None: return if keep_dict and isinstance(items, Mapping): yield items else: for x in items: if ( isinstance(x, Iterable) and not isinstance(x, (str, bytes)) and (not keep_dict or not isinstance(x, Mapping)) ): for sub_x in flatten(x, keep_dict): yield sub_x else: yield x
def update_dict(d, u)
-
Add u's keys to d. Override key in d if existing. Similar to JavaScript's Object.assign (but changes d inplace as well).
Expand source code
def update_dict(d, u): """Add u's keys to d. Override key in d if existing. Similar to JavaScript's Object.assign (but changes d inplace as well). """ for k, v in u.items(): if isinstance(v, Mapping): d[k] = update_dict(d.get(k, {}), v) else: d[k] = v return d
def write_dict(d, fn)
-
Write dict to disk
Expand source code
def write_dict(d, fn): """Write dict to disk """ if not type(fn) == str: fn = str(fn) with open(fn, "w", encoding="utf-8") as f: json.dump(d, f, ensure_ascii=False, indent=4)