2017-02-20 8 views
0
list1 = [ 
    {'id': 1, 'country': 'Italy'}, 
    {'id': 2, 'country': 'Spain'}, 
    {'id': 3, 'country': 'Japan'} 
] 

私はlist1からcountry != Italyを持つすべての辞書削除するには、このコードを使用します。削除辞書

list2 = [element for element in list1 if element['country'] == 'Italy'] 

をしかし、私はcountry == 'Italy'country == 'Spain'list2辞書に含まれ、他のすべてを削除するには(または別のものを作成せずにlist1からそれらをよりよくポップする)。私は、これは1行でどのように行うことができます=

+2

'[のための要素IIUCで動作する['Italy'、 'Spain']] 'の要素['country']がlist1の要素である。リストの理解は、1行でそれを行う唯一の方法です。リストからポップすると、現在のリストではなく、ループが必要です... –

+0

ポップアップは通常、すべての要素を移動することが* O(n)*で行われるので、より多くの時間を必要とします(残念ながらリストを提供する効率的な方法はないようですインデックスはすべて削除する必要があります)。 –

+0

Nitpick:あなたは 'country == 'イタリア" OR "国=='スペイン 'を意味する – BallpointBen

答えて

1

あなたは本当にワンライナーをしたい場合は、インプレースリストの更新をリストの内包を使用することができます。

list1[:] = [d for d in list1 if d['country'] in ('Spain', 'Italy')] 
関連する問題