Почему я получаю сообщение «Объект NoneType не повторяется» при фильтрации списка словарей с пониманием списка и обработкой None?

Я пытаюсь отфильтровать список словарей в 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)

🤔 А знаете ли вы, что...
С Python можно создавать веб-скраперы для извлечения данных из веб-сайтов.


67
1

Ответ:

Решено

Как говорится в комментариях, вы не обрабатываете 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
    ]
.
.
.