added jay_diff
This commit is contained in:
+156
@@ -0,0 +1,156 @@
|
|||||||
|
from copy import deepcopy
|
||||||
|
|
||||||
|
def jay_diff_rev(data, temp_data):
|
||||||
|
new_data = {}
|
||||||
|
for k in data.keys():
|
||||||
|
if k not in temp_data:
|
||||||
|
temp_data[k] = data[k]
|
||||||
|
new_data[k] = data[k]
|
||||||
|
if isinstance(temp_data[k], dict):
|
||||||
|
new_data, temp_data = jay_diff_rev(data[k], temp_data[k])
|
||||||
|
return new_data, temp_data
|
||||||
|
|
||||||
|
|
||||||
|
def jay_diff_plus(data, temp_data):
|
||||||
|
temp = deepcopy(temp_data)
|
||||||
|
res, _ = jay_diff_rev(data, temp)
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
def jay_diff_minus(data, temp_data):
|
||||||
|
temp = deepcopy(data)
|
||||||
|
res, _ = jay_diff_rev(temp_data, temp)
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
def jay_diff_upd(data, temp_data):
|
||||||
|
new_data = {}
|
||||||
|
for k in data.keys():
|
||||||
|
if k in temp_data:
|
||||||
|
if data[k] != temp_data[k]:
|
||||||
|
new_data[k] = data[k]
|
||||||
|
return new_data
|
||||||
|
|
||||||
|
|
||||||
|
def jay_diff_full(data, temp_data):
|
||||||
|
update = jay_diff_upd(data, temp_data)
|
||||||
|
plus = jay_diff_plus(data, temp_data)
|
||||||
|
minus = jay_diff_minus(data, temp_data)
|
||||||
|
return {'diff': {'plus': plus, 'minus': minus, 'update': update}}
|
||||||
|
|
||||||
|
|
||||||
|
def jay_merge_update(d, u):
|
||||||
|
for k, v in u.items():
|
||||||
|
if isinstance(v, dict):
|
||||||
|
r = jay_merge_update(d.get(k, {}), v)
|
||||||
|
d[k] = r
|
||||||
|
else:
|
||||||
|
d[k] = u[k]
|
||||||
|
return d
|
||||||
|
|
||||||
|
|
||||||
|
def jay_merge_plus(d, u):
|
||||||
|
for k, v in u.items():
|
||||||
|
if isinstance(v, dict):
|
||||||
|
if k in d:
|
||||||
|
d[k].update(v)
|
||||||
|
else:
|
||||||
|
d[k] = v
|
||||||
|
else:
|
||||||
|
d[k] = u[k]
|
||||||
|
return d
|
||||||
|
|
||||||
|
|
||||||
|
def jay_merge_minus(d, u):
|
||||||
|
for k, v in u.items():
|
||||||
|
if isinstance(v, dict):
|
||||||
|
jay_merge_minus(d[k], u[k])
|
||||||
|
else:
|
||||||
|
if k in d:
|
||||||
|
del d[k]
|
||||||
|
return d
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
a = {'a':'hamburger', 'b':'fries', 'c':'coke'}
|
||||||
|
b = {'a':'hamburger', 'b':'fries', 'c':'pepsi'}
|
||||||
|
c = {'a':'hamburger', 'b':'fries', 'c':'pepsi', 'd':'icecream'}
|
||||||
|
d = {'a':'hamburger', 'c':'pepsi', 'd':'icecream'}
|
||||||
|
e = {'a':'HotDog', 'b':'fries', 'd':'icecream'}
|
||||||
|
|
||||||
|
last = {}
|
||||||
|
diffed = jay_diff_plus(a, {})
|
||||||
|
print(f"a: Plus: {diffed}")
|
||||||
|
|
||||||
|
diffed = jay_diff_plus(b, a)
|
||||||
|
print(f"b: Plus: {diffed}")
|
||||||
|
|
||||||
|
diffed = jay_diff_plus(c, b)
|
||||||
|
print(f"c: Plus: {diffed}")
|
||||||
|
|
||||||
|
diffed = jay_diff_plus(d, c)
|
||||||
|
print(f"d: Plus: {diffed}")
|
||||||
|
|
||||||
|
diffed = jay_diff_minus(a, {})
|
||||||
|
print(f"a: Minus: {diffed}")
|
||||||
|
|
||||||
|
diffed = jay_diff_minus(b, a)
|
||||||
|
print(f"b: Minus: {diffed}")
|
||||||
|
|
||||||
|
diffed = jay_diff_minus(c, b)
|
||||||
|
print(f"a: Minus: {diffed}")
|
||||||
|
|
||||||
|
diffed = jay_diff_minus(d, c)
|
||||||
|
print(f"d: Minus: {diffed}")
|
||||||
|
|
||||||
|
diffed = jay_diff_upd(a, {})
|
||||||
|
print(f"a: Update: {diffed}")
|
||||||
|
|
||||||
|
diffed = jay_diff_upd(b, a)
|
||||||
|
print(f"b: Update: {diffed}")
|
||||||
|
|
||||||
|
diffed = jay_diff_upd(c, b)
|
||||||
|
print(f"a: Update: {diffed}")
|
||||||
|
|
||||||
|
diffed = jay_diff_upd(d, c)
|
||||||
|
print(f"d: Update: {diffed}")
|
||||||
|
|
||||||
|
diffed = jay_diff_full(a, {})
|
||||||
|
print(f"a: Full: {diffed}")
|
||||||
|
|
||||||
|
diffed = jay_diff_full(b, a)
|
||||||
|
print(f"b: Full: {diffed}")
|
||||||
|
|
||||||
|
diffed = jay_diff_full(c, b)
|
||||||
|
print(f"c: Full: {diffed}")
|
||||||
|
|
||||||
|
diffed = jay_diff_full(d, c)
|
||||||
|
print(f"d: Full: {diffed}")
|
||||||
|
|
||||||
|
diffed = jay_diff_full(e, d)
|
||||||
|
print(f"e: Full: {diffed}")
|
||||||
|
|
||||||
|
|
||||||
|
a = {'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}
|
||||||
|
b = {'b':'fries', 'c':'pepsi'}
|
||||||
|
c = {'d':'icecream'}
|
||||||
|
d = {'c': {'f': 'coffee'}}
|
||||||
|
|
||||||
|
merged = jay_merge_plus({}, a)
|
||||||
|
print(f"a: Plus: {merged}")
|
||||||
|
|
||||||
|
merged = jay_merge_plus(merged, c)
|
||||||
|
print(f"c: Plus: {merged}")
|
||||||
|
|
||||||
|
merged = jay_merge_minus(merged, c)
|
||||||
|
print(f"c: Minus: {merged}")
|
||||||
|
|
||||||
|
merged = jay_merge_minus(merged, d)
|
||||||
|
print(f"d: Minus: {merged}")
|
||||||
|
|
||||||
|
merged = jay_merge_plus(merged, d)
|
||||||
|
print(f"d: Plus: {merged}")
|
||||||
|
|
||||||
|
c = {'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}, 'd':'icecream'}
|
||||||
|
d = {'a':'hamburger', 'c':'pepsi', 'd':'icecream'}
|
||||||
|
e = {'a':'HotDog', 'b':'fries', 'd':'icecream'}
|
||||||
Reference in New Issue
Block a user