Python从列表中删除Key/Value元素并返回新的lis

2024-10-03 17:23:22 发布

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

我已经读了一些其他的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'}}]

我需要移除:

^{pr2}$

并返回不存在键/值元素的新列表。我可以这样做(我更喜欢这种格式),但这只返回过滤器要查找的key/value元素。在

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

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


Tags: projectcomview元素列表emailreaderrole
2条回答

将条件反转为

not (...)

所以

^{pr2}$

变成

^{3}$

我不确定,但可能是next()

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

相关问题 更多 >