检查python中未排序的字典列表的相等性

时间:2017-08-24 20:46:50

标签: python dictionary

我想确保2个未排序的词典列表相同,即它们具有相同的内容,即使订单可能不同。

in检查不够好,因为重复的词典是可能的。 (例如list1 = [dict1, dict1, dict2]list2 = [dict1, dict2, dict2]

如果是列表清单,我只需对它们进行排序:

sorted(list_of_lists1) == sorted(list_of_lists2)

但排序词典不稳定。

我可以通过将所有的dicts转换为元组来解决这个问题,但这看起来既低效又蹩脚。

有更直接的解决方案吗?

2 个答案:

答案 0 :(得分:1)

我认为你不需要散列任何东西 - 你可以将每个字典更改为键值对元组的排序列表,并对其进行排序。

Execute row SQL script

按预期输出:

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))

答案 1 :(得分:0)

如果您希望确保每个列表中的完全相同的对象具有相同的次数,您可以依赖字典的id(Using CSS Transitions on Auto Dimensions),并执行您提到的排序:

if sorted(id(d) for d in list1) == sorted(id(d) for d in list2):
    ...

如果您正在寻找可能相同但不是同一个python对象的dicts,那么这将不起作用。