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'] 

Но я включить в list2 словарях, country == 'Italy' И country == 'Spain' и удалить все остальное (или даже лучше поп их от list1, не создавая другого). Как я могу сделать это в одной строке =

+2

'[элемент для элемент в списке1, если элемент ['country'] в ['Italy', 'Spain']] ', который будет работать IIUC. И понимание списка - единственный способ сделать это в одной строке. popping from list нуждается в цикле, а не в текущем списке ... –

+0

Popping обычно требует больше времени с момента перемещения всех элементов в * O (n) * (к сожалению, похоже, нет эффективного метода для предоставления списка индексы, которые должны быть удалены). –

+0

Nitpick: вы имеете в виду 'country == 'Italy'' OR' country ==' Spain'' – BallpointBen

ответ

1

Если вы действительно хотите один вкладыш, вы можете использовать список понимание с обновлением в место списке:

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