在python字典中去掉NaN作为键

2024-05-20 04:38:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字典,其中一个键是NaN,我想删除这个键及其对应的值。我试过了:

from math import isnan

clean_dict = filter(lambda k: not isnan(k), dict_HMDB_ID)

但是干净的字典不是字典。我想从python输出它,但是我得到''


Tags: lambdafromimportcleanid字典notmath
2条回答

你可以:

from math import nan
dict_HMDB_ID.pop(nan)
clean_dict = dict_HMDB_ID

或者相反,如果你想保存

^{pr2}$

filter不返回字典。它在python2中返回一个list,在python3中返回一个filter对象。在

您可以使用^{}

d = {'a': 1, 'b': 2}
print(d)
# {'a': 1, 'b': 2}
d.pop('b')
print(d)
# {'a': 1}

在你的具体案例中

^{pr2}$

为了完整起见。它可以通过字典理解来完成,但是迭代没有意义,因为键是唯一的

clean_dict = {k: v for k, v in dict_HMDB_ID.items() if not math.isnan(k)}


如果您坚持在这里使用filter(您真的不应该),您需要:

  1. 传递它dict_HMDB_ID.items(),这样它将保持原始值
  2. 提供一个自定义函数,因为它现在将对(key, value)元组进行操作。在
  3. 将返回的filter对象(它将包含一个具有(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}

相关问题 更多 >