字典列表理解多条件

2024-09-29 06:29:37 发布

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

我对列表中的多个条件有问题:

listionary = [{u'city': u'paris', u'id': u'1', u'name': u'paul'},
              {u'city': u'madrid', u'id': u'2', u'name': u'paul'},
              {u'city': u'berlin', u'id': u'3', u'name': u'tom'},
              {u'city': u'madrid', u'id': u'4', u'name': u'tom'}]

我尝试删除同时满足这两个条件的项。在

^{pr2}$

在这种情况下,元素被移除,如果至少满足一个条件,我试着用几种方法来做,有什么想法吗?在

预期产量:

[{u'city': u'paris', u'id': u'1', u'name': u'paul'}
{u'city': u'berlin', u'id': u'3', u'name': u'tom'}
{u'city': u'madrid', u'id': u'4', u'name': u'tom'}]

我想删除同时满足这两个条件的元素。在


Tags: 方法nameid元素city列表情况条件
3条回答

你的情况应该是这样的

[e for e in data if not (e.get('name') == 'paul' and e.get('city') == 'madrid')]

输出

^{2}$

这将检查当前元素的name是否为paul,而{}是否为{}。如果这两个条件都满足,外部的not将翻转它,因此您将得到False,并且该项将被省略。在

基本上,您要检查当前项是否是您不想要的项,并使if条件失败,如果是的话。在

您可以使用^{}将所有值放入tuple中,然后进行比较:

>>> from operator import itemgetter
>>> name_and_city = itemgetter('name', 'city')
>>> [e for e in listionary if name_and_city(e) != ('paul', 'madrid')]

尝试将and更改为or。在

[elem for elem in listionary if (elem.get('name')!='paul' or elem.get('city')!='madrid')]

记住de morgan's laws。非正式地说:当你否定一个布尔表达式时,除了用“==”切换之外,还必须用and和{}切换{}!=". 在

相关问题 更多 >