Python - 从一个列表中比较两个dict和return dicts列表

时间:2015-05-15 01:52:17

标签: python list dictionary

我有两个列表,a = [dict1, dict2, dict3]和b = [dict1, dict2, dict4, dict5, dict6]

我想创建另外两个列表,两个列表中的dicts在另一个列表中找不到。所以他们会,

c = [dict3] and d = [dict4, dict5]

我尝试了以下内容,但它返回了许多dicts的方式

for i, j in [(i,j) for i in range(len(a)) for j in range(len(b))]:
    if cmp(b[j],a[i]) == 1 or -1:
        new_prods = {}
        new_prods = a[i]
        c.append(new_prods)  

for i, j in [(i,j) for i in range(len(a)) for j in range(len(b))]:
    if cmp(b[j],a[i]) == 0:
        old_prods = {}
        old_prods = b[j]
        d.append(old_prods)  

提前致谢

3 个答案:

答案 0 :(得分:4)

一个简单的 O(n ^ 2)解决方案:

a = [dict1, dict2, dict3] 
b = [dict1, dict2, dict4, dict5, dict6]

c = dicts_from_a_not_in_b = [x for x in a if x not in b]
d = dicts_from_b_not_in_a = [x for x in b if x not in a]

答案 1 :(得分:0)

在我看来,在这种情况下使用套装会很有意义。

c = set(a).difference(b)    
d = set(b).difference(a)

您可以通过简单地按列表(c)&amp ;;将它们转换为列表。列表(d)

答案 2 :(得分:0)

以下是重复使用函数的另一种方法:

a = [dict1, dict2, dict3]
b = [dict1, dict2, dict4, dict5, dict6]

def find_uncommon_elements(list1, list2):
    list3 = []
    for item in list1:
        if item not in list2:
            list3.append(item)
    return list3

c = find_uncommon_elements(a,b)
d = find_uncommon_elements(b,a)

编写一个函数有助于以后再使用一组不同的字典列表重新使用它,而不必重写整个函数。

这将返回:

c = [dict3]
d = [dict4, dict5, dict6]