feat: base 添加了对比字典及其嵌套内容的方法

This commit is contained in:
caoqianming 2023-12-07 09:37:54 +08:00
parent 5dab6b0815
commit d9ddefe5db
1 changed files with 36 additions and 2 deletions

View File

@ -9,10 +9,11 @@ import requests
from io import BytesIO
from rest_framework.serializers import ValidationError
def tran64(s):
missing_padding = len(s) % 4
if missing_padding != 0:
s = s+'='* (4 - missing_padding)
s = s+'=' * (4 - missing_padding)
return s
@ -202,4 +203,37 @@ def check_phone_e(phone):
re_phone = r'^1\d{10}$'
if not re.match(re_phone, phone):
raise ValidationError('手机号格式错误')
return phone
return phone
def compare_dicts(dict1, dict2, ignore_order=False):
if ignore_order:
for key in sorted(dict1.keys()):
if key not in dict2 or not compare_values(dict1[key], dict2[key], ignore_order):
return False
return True
else:
return dict1 == dict2
def compare_lists_of_dicts(list1, list2, ignore_order=False):
"""比较两个列表,这里的列表包含字典(对象)"""
if ignore_order:
# 转换列表中的字典为元组列表,然后排序进行比较
sorted_list1 = sorted((tuple(sorted(d.items())) for d in list1))
sorted_list2 = sorted((tuple(sorted(d.items())) for d in list2))
return sorted_list1 == sorted_list2
else:
# 按顺序比较列表中的字典
return all(compare_dicts(obj1, obj2) for obj1, obj2 in zip(list1, list2))
def compare_values(val1, val2, ignore_order=False):
"""通用比较函数,也可以处理字典和列表。"""
if isinstance(val1, list) and isinstance(val2, list):
# 假设这里我们关心列表中对象的顺序
return compare_lists_of_dicts(val1, val2, ignore_order)
elif isinstance(val1, dict) and isinstance(val2, dict):
return compare_dicts(val1, val2, ignore_order)
else:
return val1 == val2