词典理解列表 - 多个条件

cau*_*eyo 4 python list-comprehension list multiple-conditions

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

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'}]
Run Code Online (Sandbox Code Playgroud)

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

[elem for elem in listionary if (elem.get('name')!='paul' and elem.get('city')!='madrid')]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果满足至少一个条件,则删除元素,我尝试以多种方式进行,任何想法?

预期产量:

[{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'}]
Run Code Online (Sandbox Code Playgroud)

我想删除符合这两个条件的元素.

Kev*_*vin 5

尝试更改andor.

[elem for elem in listionary if (elem.get('name')!='paul' or elem.get('city')!='madrid')]
Run Code Online (Sandbox Code Playgroud)

记住de morgan的定律.通俗地说:当你否定布尔表达式,你必须选择andor除了切换"=="和"!=".


the*_*eye 5

你的病情应该是这样的

[e for e in data if not (e.get('name') == 'paul' and e.get('city') == 'madrid')]
Run Code Online (Sandbox Code Playgroud)

产量

[{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'}]
Run Code Online (Sandbox Code Playgroud)

此检查,如果当前元素namepaulcitymadrid.如果两个条件都满足,not外面会翻转它,所以你会得到False,项目将被省略.

基本上,您正在检查当前项目是否是您不想要的项目,if如果是,则使条件失败.