我一直在阅读其他一些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'}]
如何从列表中删除元素,然后打印出缺少过滤元素的新列表?
答案 0 :(得分:3)
将条件反转为
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)
变为
line = line.replaceFirst(",","");
String[] country = line.split(cvsSplitBy);
objectArrayList.add(country);
答案 1 :(得分:0)
我不确定,但可能使用next()
:
list.remove(next(obj for obj in list if obj == {u'role': u'READER', u'userByEmail': u'test1@email.com'}))