2017-04-20 4 views
2

나는 몇 가지 다른 문서를 읽고 내가 수행하려고 노력하고있는 부분을 이해하지만 아직 내 대답을 해결하는 대답을 찾지 못했습니다. 요구 사항.Python - 목록에서 키/값 요소를 제거하고 새 목록을 반환하십시오.

[1,2,3,4]와 같은 간단한 목록에서 단일 항목을 제거하는 방법을 알고 있지만 더 복잡한 목록이 있습니다. 주문/내용을 예측할 수 없으며 제거하려고합니다. 나는 제거해야

list = [{u'role': u'OWNER', u'userByEmail': u'[email protected]'}, {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'[email protected]'}, {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'[email protected]'} 

및 그 키/값 요소 존재하지 않고 새 목록을 반환합니다. 이런 식으로 할 수 있지만 (이 형식을 선호하는) 필터는 찾고있는 키/값 요소 만 반환합니다.

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

목록에서 요소를 제거한 다음 필터링 된 요소가없는 새 목록을 어떻게 인쇄합니까?

+0

그래서 '필터'와 정확히 반대되는'람다 '를 사용해야합니다. – ForceBru

+0

필터 할 술어가 * 유지할 내용을 결정합니다. 그냥 무효화해라. –

답변

3

반전

not (...) 

에 조건이 너무

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

filter(lambda row: not (row.has_key('userByEmail') and row['userByEmail'] == '[email protected]'), list) 
+0

와우, 내가 그걸 놓쳤다 니 믿을 수가 없어. 고마워. – user3282173

0

내가하지 확신하지만,이된다 어쩌면 next()과 :

list.remove(next(obj for obj in list if obj == {u'role': u'READER', u'userByEmail': u'[email protected]'})) 
관련 문제