繁体   English   中英

Python-从列表中删除键/值元素并返回新列表

[英]Python - Remove Key/Value element from list and return new list

我已经阅读了其他一些SO文章,并了解了我要完成的工作的点点滴滴,但我还没有确定一个涵盖我的要求的答案。

我知道如何从[1,2,3,4]这样的简单列表中删除单个项目,但是我有一个更复杂的列表,在该列表中,顺序/内容是不可预测的,因此我尝试从中删除元素:

list = [{u'role': u'OWNER', u'userByEmail': u'test1@email.com'}, {u'specialGroup': u'projectWriters', u'role': u'READER'}, {u'specialGroup': u'projectOwners', u'role': u'READER'}, {u'specialGroup': u'projectReaders', u'role': u'READER'}, {u'role': u'READER', u'userByEmail': u'test2@email.com'}, {u'view': {u'projectId': u'project-01', u'tableId': u'testing_tbl_2', u'datasetId': u'test2'}}, {u'view': {u'projectId': u'project-01', u'tableId': u'testing_tbl_3', u'datasetId': u'dtest2'}}, {u'view': {u'projectId': u'project-01', u'tableId': u'view1', u'datasetId': u'test2'}}]

我需要删除:

{u'role': u'READER', u'userByEmail': u'test1@email.com'}

并返回没有该键/值元素的新列表。 我可以做这样的事情(我更喜欢这种格式),但这只会返回过滤器正在寻找的键/值元素。

>>> filter(lambda row: row.has_key('userByEmail') and row['userByEmail'] == 'test1@email.com', list)
[{u'role': u'OWNER', u'userByEmail': u'test1@email.com'}] 

如何从列表中删除元素,然后打印出缺少过滤元素的新列表?

反转条件为

not (...)

所以

filter(lambda row: row.has_key('userByEmail') and row['userByEmail'] == 'test1@email.com', list)

filter(lambda row: not (row.has_key('userByEmail') and row['userByEmail'] == 'test1@email.com'), list)

我不确定,但也许与next()

list.remove(next(obj for obj in list if obj == {u'role': u'READER', u'userByEmail': u'test1@email.com'}))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM