Add dict differ helpers from SO answer
parent
b75683879a
commit
2f6e3ad03f
|
@ -101,3 +101,30 @@ def percent_change(
|
|||
new: float,
|
||||
) -> float:
|
||||
return pnl(init, new) * 100.
|
||||
|
||||
|
||||
def diff_dict(
|
||||
d1: dict,
|
||||
d2: dict,
|
||||
|
||||
) -> dict:
|
||||
d1_keys = set(d1.keys())
|
||||
d2_keys = set(d2.keys())
|
||||
shared_keys = d1_keys.intersection(d2_keys)
|
||||
shared_deltas = {o: (d1[o], d2[o]) for o in shared_keys if d1[o] != d2[o]}
|
||||
added_keys = d2_keys - d1_keys
|
||||
added_deltas = {o: (None, d2[o]) for o in added_keys}
|
||||
deltas = {**shared_deltas, **added_deltas}
|
||||
return parse_deltas(deltas)
|
||||
|
||||
|
||||
def parse_deltas(deltas: dict) -> dict:
|
||||
res = {}
|
||||
for k, v in deltas.items():
|
||||
if isinstance(v[0], dict):
|
||||
tmp = diff_dict(v[0], v[1])
|
||||
if tmp:
|
||||
res[k] = tmp
|
||||
else:
|
||||
res[k] = v[1]
|
||||
return res
|
||||
|
|
Loading…
Reference in New Issue