아무도 언급하지 않은 것 같으 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에 동일한 속성 키가있는 경우 (예 에서와는 다른 속성 값으로 가능) 작동합니다. 는 IF 그러나, "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
}
}
}
대안 : use를 사용 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