我想确保两个未排序的字典列表相同,即它们具有相同的内容,即使顺序可能不同。
检查in还不够好,因为可能存在重复的字典。(例如list1 = [dict1, dict1, dict2]和list2 = [dict1, dict2, dict2])
如果是列表列表,我只需对它们进行排序:
sorted(list_of_lists1) == sorted(list_of_lists2)
但字典排序不稳定。
我可以通过将所有字典转换为元组来解决这个问题,但这似乎效率低下且蹩脚。
有没有更直接的解决办法?
我认为您不需要散列任何内容 - 您可以将每个字典更改为键值对元组的排序列表,然后对其进行排序。
def dict_list_eq(l1, l2):
sorted_l1 = sorted(sorted(d.items()) for d in l1)
sorted_l2 = sorted(sorted(d.items()) for d in l2)
return sorted_l1 == sorted_l2
l1 = [{1: 2}, {3: 4}]
l2 = [{3: 4}, {1: 2}]
l3 = [{1: 209}, {3: 4}]
print(dict_list_eq(l1, l2))
print(dict_list_eq(l1, l3))
Run Code Online (Sandbox Code Playgroud)
输出,如预期:
True
False
Run Code Online (Sandbox Code Playgroud)