2017-04-20 16 views
2

私はいくつかの他のSOの記事を読んでおり、達成しようとしていることの一部を理解していますが、要件。Python - リストからKey/Value要素を削除して新しいリストを返す

私は[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

だから、正確に反対の 'lambda 'で' filter'を使うべきです。 – ForceBru

+0

フィルタに与える述語は、*保持するものを決める*。ちょうどそれを否定する... –

答えて

3

反転

not (...) 

への条件はそれほど

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

は、私はよく分からないが、おそらくnext()

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

うわー、私はその笑を逃したとは思えない。ありがとう。 – user3282173

0

次のようになります。

list.remove(next(obj for obj in list if obj == {u'role': u'READER', u'userByEmail': u'[email protected]'})) 
関連する問題