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