2015-07-22 5 views
2

Есть ли способ сделать следующее в одной строке?Как выполнить операцию удаления однострочной строки

[del item for item in new_json if item['Country'] in countries_to_remove] 

Приведенное выше дает мне SyntaxError.

+0

Пожалуйста, добавьте пример данных. Какой вклад у вас есть, какой результат вы хотите. – kay

ответ

4

del is a statement и вы не можете использовать это as an expression in list comprehenstion. Вот почему вы получаете SyntaxError.

Вы можете использовать список понимание, чтобы создать новый список, без элементов, которые вы не хотите, как этот

[item for item in new_json if item['Country'] not in countries_to_remove] 

Это фактически эквивалентно,

result = [] 
for item in new_json: 
    if item['Country'] not in countries_to_remove: 
     result.append(item) 

Это вид операции называется фильтрацией списка, и вы можете использовать встроенную функцию filter, например,

list(filter(lambda x: x['Country'] not in countries_to_remove, new_json)) 

Как было предложено mgilson in the comments section, если вы просто хотите, чтобы мутировать первоначальный список, то вы можете использовать нарезки назначение, как этот

new_json[:] = [x for x in new_json if x['Country'] not in countries_to_remove] 
+0

И если вам нужно выполнить операцию на месте, вы можете использовать назначение slice: 'new_json [:] = [item for item in ...]' – mgilson

4

del это заявление в питоне, и вы не можете иметь заявления внутри списка (вы можете иметь только выражения). Почему бы просто не создать new_json в качестве нового списка или словаря, который не включает элементы, которые вы хотите удалить. Пример =

new_json = [item for item in new_json if item['Country'] not in countries_to_remove] 
+0

Хорошо, вот что я в итоге сделал. – David542