我有一个字典,其中一个键是NaN,我想删除键及其对应的值。我试过这个:
from math import isnan
clean_dict = filter(lambda k: not isnan(k), dict_HMDB_ID)
但clean_dict不是字典。我想从python输出它,但我得到''
答案 0 :(得分:2)
filter
没有返回字典。它返回Python 2中的列表和Python 3中的过滤器对象。
您可以使用dict.pop
:
d = {'a': 1, 'b': 2}
print(d)
# {'a': 1, 'b': 2}
d.pop('b')
print(d)
# {'a': 1}
在您的具体情况下,
dict_HMDB_ID.pop(float('NaN'))
为了完整起见。 可以完成字典理解,但迭代没有意义,因为无论如何键都是唯一的
clean_dict = {k: v for k, v in dict_HMDB_ID.items() if not math.isnan(k)}
如果你坚持在这里使用filter
(你真的不应该),你将需要:
dict_HMDB_ID.items()
,以便保留原始值(key, value)
元组上运行。(key, value)
元组的迭代器)转换回字典
import math
dict_HMDB_ID = {1: 'a', float('Nan'): 'b'}
clean_dict = dict(filter(lambda tup: not math.isnan(tup[0]), dict_HMDB_ID.items()))
print(clean_dict)
# {1: 'a'}
我应该提一下,第一种方法(.pop
)直接修改dict_HMDB_ID
,而另外两种方法创建一个新字典。如果您希望使用.pop
和创建新词典(保留dict_HMDB_ID
),可以使用dict
创建新词典:
d = {'a': 1, 'b': 2}
new_d = dict(d)
new_d.pop('b')
print(d)
# {'b': 2, 'a': 1}
print(new_d)
# {'a': 1}
答案 1 :(得分:-1)
from math import nan
dict_HMDB_ID.pop(nan)
clean_dict = dict_HMDB_ID
或者如果您想保留dict_HMDB_ID
from math import nan
clean_dict = dict(dict_HMDB_ID)
clean_dict.pop(nan)