যেহেতু মনে হয় কারও নাম উল্লেখ করা হয়নি 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
}
}
}
পরিদর্শনের জন্য ফলাফলটি সুন্দর-মুদ্রণের বিষয়ে নোট: উপরের কোডটি যদি উভয় ডিক্টের একই বৈশিষ্ট্য কী থাকে (উদাহরণ হিসাবে যেমন আলাদা আলাদা অ্যাট্রিবিউট মান সহ) ব্যবহার করে works তবে, যদি কোনও "extra"
বৈশিষ্ট্য উপস্থিত থাকে তবে সেগুলির মধ্যে একটি হ'ল, 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 == y
অনুযায়ী সত্য হওয়া উচিত stackoverflow.com/a/5635309/186202