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)
我想删除符合这两个条件的元素.
尝试更改and为or.
[elem for elem in listionary if (elem.get('name')!='paul' or elem.get('city')!='madrid')]
Run Code Online (Sandbox Code Playgroud)
记住de morgan的定律.通俗地说:当你否定布尔表达式,你必须选择and与or除了切换"=="和"!=".
你的病情应该是这样的
[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)
此检查,如果当前元素name是paul和city是madrid.如果两个条件都满足,not外面会翻转它,所以你会得到False,项目将被省略.
基本上,您正在检查当前项目是否是您不想要的项目,if如果是,则使条件失败.