2017-11-14 17 views
0

私は1つのキーがNaNである辞書を持っている、と私はキーとそれに対応する値を取り除くためにしたい、私はこれをしようとしている:Pythonの辞書でキーとしてRID ODはNaNを取得

from math import isnan 

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

ですが、clean_dictは辞書ではありません。私はPythonから出力したいときに取得します。 '

答えて

2

filterは辞書を返しません。完全を期すために

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

そして、あなたの特定のケースでは

dict_HMDB_ID.pop(float('NaN')) 

:それは、Python 2のリストとあなたがdict.popを使用することができますPythonの3

でフィルタオブジェクトを返します。それ辞書理解して行うことができるが、キーはあなたが(あなたが本当にいけない)ここにfilterを使用して主張する場合、必要となるとにかく

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


一意であるため、反復処理にはポイントがありませんパスをdict_HMDB_ID.items()

  1. ので、それは今operatするので、元の値
  2. は、カスタム関数を提供し続けます。へe on (key, value)タプル。
  3. は辞書に戻っフィルタオブジェクト(それは(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他の2つは新しい辞書を作成します。あなたがdictと新しい辞書を作成することができます(それがあるとしてdict_HMDB_IDを残す).pop新しい辞書を作成を使用したい場合:

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

あなたが行うことができます:

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) 
+0

編集解答を削除するには – olricson

+0

私の悪いことは、私の答えを編集した 'dict'を忘れてしまった – olricson

関連する問題