2017-02-20 69 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'] 

但我在list2词典包括country == 'Italy'country == 'Spain'并删除所有其他(或者更好地从list1中弹出它们而不创建另一个)。我怎样才能在一行中做到这一点=

+2

'[元素如果元素['国家']在['意大利','西班牙]]''工作IIUC的list1中的元素。列表理解是唯一一条这样做的方法。从列表中弹出需要一个循环,而不是在当前列表中... –

+0

Popping通常需要更多时间,因为移动所有元素都是在* O(n)*中完成的(遗憾的是,似乎没有有效的方法来提供列表应该全部删除的索引)。 –

+0

Nitpick:你的意思是'country =='意大利'或'country =='西班牙' – BallpointBen

回答

1

如果你真的想要一个班轮,您可以使用列表理解就地列表更新:

list1[:] = [d for d in list1 if d['country'] in ('Spain', 'Italy')]