Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-比较两个dict列表并从一个列表返回dict_Python_List_Dictionary - Fatal编程技术网

Python-比较两个dict列表并从一个列表返回dict

Python-比较两个dict列表并从一个列表返回dict,python,list,dictionary,Python,List,Dictionary,我有两个列表,a=[dict1,dict2,dict3]和b=[dict1,dict2,dict4,dict5,dict6] 我想再创建两个列表,其中两个列表中的dict在另一个列表中找不到。所以他们会 c = [dict3] and d = [dict4, dict5] 我试过以下几点,但很多格言都是如此 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

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

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

c = [dict3] and d = [dict4, dict5]
我试过以下几点,但很多格言都是如此

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)  
提前感谢

一个简单的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]
一个简单的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]

在我看来,在这种情况下使用集合是非常有意义的

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

在我看来,在这种情况下,使用集合将非常有意义,只需通过列表(c)和列表(d)将集合包装即可将其转换为列表

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

您可以通过简单地按列表(c)和列表(d)包装这些集合,将它们转换为列表。

这里有一种替代方法,可以重复使用函数:

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]

下面是一种重复使用函数的替代方法:

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]

你可以提供例子和结果吗?在你的例子中,为什么
d
不包含
dict6
呢?你可以提供例子和结果吗?在你的例子中,为什么
d
不包含
dict6
呢?这也很好,因为In在线性时间O(n)中运行。我很好奇,是什么让你相信它在线性时间中运行呢?实际上,我被纠正了。if语句中的“notin”是另一个循环。所以它是以二次时间运行的。使其成为O(m+n)的一种方法是使用集合进行成员资格测试。可能还有其他方法,但谁知道呢?这也很好,因为在线性时间O(n)中运行。我很好奇,是什么让你相信这是在线性时间中运行的?事实上,我是正确的。if语句中的“notin”是另一个循环。所以它是以二次时间运行的。使其成为O(m+n)的一种方法是使用集合进行成员资格测试。也许还有其他方法,但谁知道呢?嗨,维姆。是的,我有。它起作用了。这里有一个例子<代码>>>a=[1,2,3]
>b=[1,2,4,5,6]
[3]
[4,5,6]
您正在尝试整数。你用dicts试过了吗?谢谢@wim。你说得对,我的方法不适用于字典。嗨@wim。是的,我有。它起作用了。这里有一个例子<代码>>>a=[1,2,3]
>b=[1,2,4,5,6]
[3]
[4,5,6]
您正在尝试整数。你用dicts试过了吗?谢谢@wim。你说得对,我的方法不适用于字典。