<p><code>filter</code>不返回字典。它在python2中返回一个list,在python3中返回一个filter对象。在</p>
<p>您可以使用<a href="https://docs.python.org/3.5/library/stdtypes.html#dict.pop" rel="nofollow noreferrer">^{<cd2>}</a>:</p>
<pre><code>d = {'a': 1, 'b': 2}
print(d)
# {'a': 1, 'b': 2}
d.pop('b')
print(d)
# {'a': 1}
</code></pre>
<p>在你的具体案例中</p>
^{pr2}$
<p>为了完整起见。它可以通过字典理解来完成,但是迭代没有意义,因为键是唯一的</p>
<pre><code>clean_dict = {k: v for k, v in dict_HMDB_ID.items() if not math.isnan(k)}
</code></pre>
<p><br/>
如果您坚持在这里使用<code>filter</code>(您真的不应该</strong>),您需要:</p>
<ol>
<li>传递它<code>dict_HMDB_ID.items()</code>,这样它将保持原始值</li>
<li>提供一个自定义函数,因为它现在将对<code>(key, value)</code>元组进行操作。在</li>
<li>将返回的filter对象(它将包含一个具有<code>(key, value)</code>元组的迭代器)转换回字典</li>
</ol>
<p><br/></p>
<pre><code>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'}
</code></pre>
<p>我应该提到第一种方法(<code>.pop</code>)直接修改<code>dict_HMDB_ID</code>,而另外两种方法则创建一个新字典。如果您希望使用<code>.pop</code><em>和</em>创建一个新字典(保留<code>dict_HMDB_ID</code>不变),则可以使用<code>dict</code>创建新字典:</p>
<pre><code>d = {'a': 1, 'b': 2}
new_d = dict(d)
new_d.pop('b')
print(d)
# {'b': 2, 'a': 1}
print(new_d)
# {'a': 1}
</code></pre>