Это кажется довольно простой вещью, но я не смог найти ответ на этот вопрос здесь (пока).
У меня есть список словарей, и некоторые из словарей в списке имеют Значения NaN. Мне просто нужно удалить любой словарь из списка, если в нем есть значение NaN.
Я сам пробовал несколько разных способов. Вот одна попытка с фильтром и лямбда-функцией, которая получила TypeError («должно быть реальное число, а не dict_values», что имеет смысл):
from math import isnan
def remove_dictionaries_missing_data(list_of_dictionaries):
return list(filter(lambda dictionary: not math.isnan(dictionary.values()), \
list_of_dictionaries))
Я также попробовал это с парой вложенных циклов и некоторыми код, в котором я действительно не был уверен, и получил ту же ошибку:
from math import isnan
def remove_dictionaries_missing_data(list_of_dictionaries):
cleaned_list = []
for dictionary in list_of_dictionaries:
if not math.isnan(dictionary[value] for value in dictionary.values()):
cleaned_list.append(dictionary)
return cleaned_list
... и, наконец, только с пониманием списка (та же ошибка):
from math import isnan
def remove_movies_missing_data(movies):
return [movie for movie in movies if not math.isnan(movie.values())]
РЕДАКТИРОВАТЬ:
Вот тот же список, с которым я работаю:
[{'year': 2013,
'imdb': 'tt2005374',
'title': 'The Frozen Ground',
'test': 'nowomen-disagree',
'clean_test': 'nowomen',
'binary': 'FAIL',
'budget': 19200000,
'domgross': nan,
'intgross': nan,
'code': '2013FAIL',
'budget_2013$': 19200000,
'domgross_2013$': nan,
'intgross_2013$': nan,
'period code': 1.0,
'decade code': 1.0},
{'year': 2011,
'imdb': 'tt1422136',
'title': 'A Lonely Place to Die',
'test': 'ok',
'clean_test': 'ok',
'binary': 'PASS',
'budget': 4000000,
'domgross': nan,
'intgross': 442550.0,
'code': '2011PASS',
'budget_2013$': 4142763,
'domgross_2013$': nan,
'intgross_2013$': 458345.0,
'period code': 1.0,
'decade code': 1.0},
... ]