1

I'm currently working with DeepDiff where I'm trying to figure out how I can get the value of the root instead of printing out the root e.g.

Value of root['hello'][0]['hello_world'] changed from "15251" to "51251".

So I have made a simple script

from deepdiff import DeepDiff

dict_a = {'hello': [{'what': 'uh', 'hello_world': '15251'}]}
dict_b = {'hello': [{'hello_world': '51251', 'what': 'uh'}]}

t = DeepDiff(dict_a, dict_b, ignore_order=True)
print(t.pretty())

>>> Value of root['hello'][0]['hello_world'] changed from "15251" to "51251".

and the output that I want to do is that I want it to be able to print out root['hello'][0] so in our case that would be dict_b['hello'][0] >>> {'hello_world': '51251', 'what': 'uh'} so that I can easily track in my dict_b the whole list rather than just the value

Is it possible to do this using DeepDiff?

jonrsharpe
  • 115,751
  • 26
  • 228
  • 437
PythonNewbie
  • 1,031
  • 1
  • 15
  • 33

1 Answers1

3

You can use the tree-view option by providing view="tree" as argument. Then you have up and t2 properties to navigate to the parent at the side of the second input structure:

t = DeepDiff(dict_a, dict_b, ignore_order=True, view="tree")
for change in t["values_changed"]:
    print(change.up.t2)  # {'hello_world': '51251', 'what': 'uh'}
trincot
  • 317,000
  • 35
  • 244
  • 286