比较2个词典列表

用户名

我想返回两个字典列表的True,它们在成员上是相等的(成员是每个字典的内容,而不考虑列表的顺序),否则返回False。在python中执行此操作的好方法是什么?

例如,如果a = [dict1,dict2]和b = [dict2,dict1],则a等于b。(dict1和dict2的键和值必须匹配。)

这是我的方式:

def _compare(self, a,b):
        if len(a) != len(b):
            return False

        for d in a:
            if d in b:
                continue
            else:
                return False
        return True
tobias_k

(这个问题有点含糊不清。据我了解,a并且b是包含词典两份名单,并要检查两个列表是否包含相同的字典,以任意顺序。)

您可以只使用all内置函数,尽管对于长列表(具有O(n²)),这会比较慢:

>>> lst1 = [{1:2, 3:4}, {5:6, 7:8}]
>>> lst2 = [{7:8, 5:6}, {3:4, 1:2}]
>>> len(lst1) == len(lst2) and all(x in lst2 for x in lst1)
True

更好地转换listdictsetfrozenset抱着类型的字典项,有O(N):

>>> set_of_tuples = lambda l: set(frozenset(d.items()) for d in l)
>>> set_of_tuples(lst1)
set([frozenset([(1, 2), (3, 4)]), frozenset([(5, 6), (7, 8)])])
>>> set_of_tuples(lst1) == set_of_tuples(lst2)
True

附录:这要求字典中的值是可哈希的。此外,它假设在同一列表中没有重复的dict(但是在这种情况下,您的代码也将不起作用,因此我认为这种假设是有效的)。如果有重复,请使用另一个答案中Counter所示的方法

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章