Я пытаюсь отфильтровать список словарей в Python, используя понимание списка. Я обрабатываю значения None, но продолжаю получать сообщение об ошибке «Объект NoneType не повторяется». Я ожидал, что мой код пропустит значения None, но он все равно выдает ошибку. Как я могу это исправить?
Вот мой код для воспроизведения проблемы:
def process_data(data, key):
return [
{k: [v for v in val if v > 10] for k, val in item.items() if k == key}
for item in data
if item is not None
]
data = [
{'values': [5, 15, 25]},
None,
{'values': [8, 12, 20]},
{'values': None},
{'values': [7, 14, 21]}
]
filtered_data = process_data(data, 'values')
print(filtered_data)
Чтобы расширить то, что сказал Децезе: у вас есть вложенный цикл for. Внутренний цикл - это тот, который вызывает b/c. None не является итеративным. Если вы попытаетесь переписать понимания в виде полных циклов и заполнить значения вручную, вы сразу увидите проблему.
Если у вас есть контроль над тем, как создается data, вы можете рассмотреть возможность использования {'values': []} вместо {'values': None}. None удобно, когда действительно нужно отличить отсутствие контейнера от пустого контейнера, но я не думаю, что это обычная необходимость.






Как говорится в комментариях, вы не обрабатываете None в 4-м словаре. Не существует исключений для получения значения None в словаре, только если вместо словаря имеется значение None. Однако это простое решение. Добавьте еще одно условие в конце строки 3, чтобы убедиться, что val не является None. Вот написан новый код.
def process_data(data, key):
return [
{k: [v for v in val if v > 10] for k, val in item.items() if k == key and val is not None}
for item in data
if item is not None
]
.
.
.
Вы не справляетесь с
Noneв{'values': None}…