私は1つのキーがNaNである辞書を持っている、と私はキーとそれに対応する値を取り除くためにしたい、私はこれをしようとしている:Pythonの辞書でキーとしてRID ODはNaNを取得
from math import isnan
clean_dict = filter(lambda k: not isnan(k), dict_HMDB_ID)
ですが、clean_dictは辞書ではありません。私はPythonから出力したいときに取得します。 '
私は1つのキーがNaNである辞書を持っている、と私はキーとそれに対応する値を取り除くためにしたい、私はこれをしようとしている:Pythonの辞書でキーとしてRID ODはNaNを取得
from math import isnan
clean_dict = filter(lambda k: not isnan(k), dict_HMDB_ID)
ですが、clean_dictは辞書ではありません。私はPythonから出力したいときに取得します。 '
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()
(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
他の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}
あなたが行うことができます:
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)
編集解答を削除するには – olricson
私の悪いことは、私の答えを編集した 'dict'を忘れてしまった – olricson