Есть ли способ сделать следующее в одной строке?Как выполнить операцию удаления однострочной строки
[del item for item in new_json if item['Country'] in countries_to_remove]
Приведенное выше дает мне SyntaxError
.
Есть ли способ сделать следующее в одной строке?Как выполнить операцию удаления однострочной строки
[del item for item in new_json if item['Country'] in countries_to_remove]
Приведенное выше дает мне SyntaxError
.
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]
И если вам нужно выполнить операцию на месте, вы можете использовать назначение slice: 'new_json [:] = [item for item in ...]' – mgilson
del
это заявление в питоне, и вы не можете иметь заявления внутри списка (вы можете иметь только выражения). Почему бы просто не создать new_json
в качестве нового списка или словаря, который не включает элементы, которые вы хотите удалить. Пример =
new_json = [item for item in new_json if item['Country'] not in countries_to_remove]
Хорошо, вот что я в итоге сделал. – David542
Пожалуйста, добавьте пример данных. Какой вклад у вас есть, какой результат вы хотите. – kay