चूंकि यह किसी का उल्लेख नहीं है deepdiff, इसलिए मैं इसे पूर्णता के लिए यहां जोड़ दूंगा। मैं इसे (नेस्टेड) वस्तुओं के सामान्य रूप से भिन्न होने के लिए बहुत सुविधाजनक मानता हूं:
स्थापना
pip install deepdiff
नमूना कोड
import deepdiff
import json
dict_1 = {
"a": 1,
"nested": {
"b": 1,
}
}
dict_2 = {
"a": 2,
"nested": {
"b": 2,
}
}
diff = deepdiff.DeepDiff(dict_1, dict_2)
print(json.dumps(diff, indent=4))
उत्पादन
{
"values_changed": {
"root['a']": {
"new_value": 2,
"old_value": 1
},
"root['nested']['b']": {
"new_value": 2,
"old_value": 1
}
}
}
निरीक्षण के लिए सुंदर-मुद्रण परिणाम के बारे में ध्यान दें: उपरोक्त कोड काम करता है यदि दोनों dicts में समान विशेषता कुंजियाँ होती हैं (उदाहरण में अलग-अलग विशेषता मान)। हालाँकि, यदि कोई "extra"विशेषता मौजूद है, तो dicts में से एक, के json.dumps()साथ विफल रहता है
TypeError: Object of type PrettyOrderedSet is not JSON serializable
समाधान: उपयोग diff.to_json()और json.loads()/ json.dumps()से प्रिंट करने के लिए:
import deepdiff
import json
dict_1 = {
"a": 1,
"nested": {
"b": 1,
},
"extra": 3
}
dict_2 = {
"a": 2,
"nested": {
"b": 2,
}
}
diff = deepdiff.DeepDiff(dict_1, dict_2)
print(json.dumps(json.loads(diff.to_json()), indent=4))
आउटपुट:
{
"dictionary_item_removed": [
"root['extra']"
],
"values_changed": {
"root['a']": {
"new_value": 2,
"old_value": 1
},
"root['nested']['b']": {
"new_value": 2,
"old_value": 1
}
}
}
वैकल्पिक: pprintएक अलग स्वरूपण में उपयोग , परिणाम:
import pprint
# same code as above
pprint.pprint(diff, indent=4)
आउटपुट:
{ 'dictionary_item_removed': [root['extra']],
'values_changed': { "root['a']": { 'new_value': 2,
'old_value': 1},
"root['nested']['b']": { 'new_value': 2,
'old_value': 1}}}
x == ystackoverflow.com/a/5635309/186202 के