如何使用另一个lis对列表进行子集理解

2024-04-26 10:02:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很大的字典列表,我想将其作为子集,如下所示:

first_list = [{'name':'James','gender':'M','address':'California'},{'name':'Tom','gender':'M','address':'California'},
{'name':'Jane','gender':'F','address':'Utah'},
{'name':'Kim','gender':'F','address':'Wisconsin'},
{'name':'Ron','gender':'M','address':'Montana'}]

我还有另一份名单,名字是:

^{pr2}$

我想得到一个列表,其中第一个列表中的“name”不是第二个列表的一部分,这只是删除了James和Tom字典。在

[{'name':'Jane','gender':'F','address':'Utah'},
{'name':'Kim','gender':'F','address':'Wisconsin'},
{'name':'Ron','gender':'M','address':'Montana'}]

我尝试过使用列表理解,但我不认为这种方法适用于不同的列表:

third_list = [x for x in first_list if x['name'] != (y for y in second_list)] 

这不起作用,将返回与第一个列表相同的列表。我的语法错误吗?在


Tags: name列表字典addressgenderlistfirsttom
3条回答

您的代码不工作,因为(y for y in second_list)是一个生成器,x['name']是一个字符串,这意味着它将一直返回{},我想您想要的是:

>>> first_list = [{'name':'James','gender':'M','address':'California'},{'name':'Tom','gender':'M','address':'California'},
... {'name':'Jane','gender':'F','address':'Utah'},
... {'name':'Kim','gender':'F','address':'Wisconsin'},
... {'name':'Ron','gender':'M','address':'Montana'}]
>>>
>>>
>>> second_list = ['James', 'Tom']
>>>
>>> [x for x in first_list if x['name'] not in second_list]
[{'gender': 'F', 'name': 'Jane', 'address': 'Utah'}, {'gender': 'F', 'name': 'Kim', 'address': 'Wisconsin'}, {'gender': 'M', 'name': 'Ron', 'address': 'Montana'}]

要做到这一点,请尝试使用filter方法:

^{pr2}$

使用适合您的not in

third_list = [i for i in first_list if i['name'] not in second_list]

结果

^{pr2}$

使用

third_list = [x for x in first_list if x['name'] not in second_list]

相关问题 更多 >