Skip to content

Instantly share code, notes, and snippets.

@r00ta
Created August 27, 2024 18:08
Show Gist options
  • Save r00ta/fbf5a42b112f74621829430dc890fab7 to your computer and use it in GitHub Desktop.
Save r00ta/fbf5a42b112f74621829430dc890fab7 to your computer and use it in GitHub Desktop.
Compare two unsorted dictionaries with unsorted lists and decimals up to the 3rd decimal
from collections.abc import Mapping
import math
def compare_dicts(dict1, dict2):
def compare_items(item1, item2):
if isinstance(item1, float) and isinstance(item2, float):
# Compare floats up to the 3rd decimal place
return math.isclose(item1, item2, abs_tol=1e-3)
elif isinstance(item1, list) and isinstance(item2, list):
# Compare lists, ignoring order
return compare_lists(item1, item2)
elif isinstance(item1, Mapping) and isinstance(item2, Mapping):
# Recursively compare dictionaries
return compare_dicts(item1, item2)
else:
return item1 == item2
def compare_lists(list1, list2):
if len(list1) != len(list2):
return False
sorted_list1 = sorted(list1, key=lambda x: str(x))
sorted_list2 = sorted(list2, key=lambda x: str(x))
return all(compare_items(i, j) for i, j in zip(sorted_list1, sorted_list2))
if dict1.keys() != dict2.keys():
return False
for key in dict1:
if not compare_items(dict1[key], dict2[key]):
return False
return True
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment