Python中如何比较元素顺序不同的字典列表?
比较顺序不同的字典列表的方法
当你需要比较两个包含相同字典但顺序不同的列表时,可以用以下两种方法:
方法一:排序后比较
将列表中的每个字典转换为有序的键值对结构,再对整个列表排序,最后直接比较排序后的列表。这种方法适用于所有场景,包括列表存在重复字典的情况。
示例代码:
l1 = [{'a': '1'}, {'b': '2'}] l2 = [{'b': '2'}, {'a': '1'}] # 把每个字典转为排序后的键值对元组,再对列表排序 sorted_l1 = sorted(tuple(sorted(d.items())) for d in l1) sorted_l2 = sorted(tuple(sorted(d.items())) for d in l2) print(sorted_l1 == sorted_l2) # 输出 True
或者更简洁的写法,利用sorted的key参数统一排序逻辑:
print(sorted(l1, key=lambda x: sorted(x.items())) == sorted(l2, key=lambda x: sorted(x.items())))
方法二:转换为集合比较
将每个字典转换为可哈希的frozenset结构(因为字典本身不可哈希,无法直接加入集合),再转换为集合进行比较。注意:这种方法仅适用于列表中没有重复字典的场景,因为集合会自动去重,若两个列表的字典元素数量不同但去重后相同,会错误返回True。
示例代码:
l1 = [{'a': '1'}, {'b': '2'}] l2 = [{'b': '2'}, {'a': '1'}] set_l1 = {frozenset(d.items()) for d in l1} set_l2 = {frozenset(d.items()) for d in l2} print(set_l1 == set_l2) # 输出 True
内容的提问来源于stack exchange,提问作者Lavish Karankar
相关产品推荐
相关产品推荐

