Add dict differ helpers from SO answer
parent
b75683879a
commit
2f6e3ad03f
|
@ -101,3 +101,30 @@ def percent_change(
|
||||||
new: float,
|
new: float,
|
||||||
) -> float:
|
) -> float:
|
||||||
return pnl(init, new) * 100.
|
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