2015-05-11 4 views
0

У меня есть этот Dict:Как я могу отфильтровать ключ из словаря на основе значения

mydict = {'Andreas': 0.4833775399766172, 'Anh': nan, 'Maryse': 0.61436719272499474, 'Darren': -0.44898819782452443, 'Jesse': 0.14565852997686479, 'Mitchell': nan} 

Наны-й не дает мне никакой информации вообще, поэтому я хочу, чтобы фильтровать их.

for k, v in mydict.iteritems(): 
    if v == 'nan': 
     del mydict[v] 

Я пробовал это, но он не работает. Может ли кто-нибудь мне помочь? Заранее спасибо.

+0

Возможные дубликат: Как проверить NaN в Python: http://stackoverflow.com/questions/944700/how-to-check-for-nan-in-python – Kmeixner

+1

Что 'nan' здесь? 'float ('nan')' или простая строка? Почему вы изменяете dict во время итерации? Почему вы 'del'ete по значению (а не по ключу)? – vaultah

ответ

1

Вы должны использовать ключ не значение, и вы не можете удалить из Dict вы Перебор, вам нужно скопировать:

for k, v in mydict.copy().items(): 
    if v == "nan": 
     del mydict[k] 

print(mydict) 

Независимо nan на самом деле, является ли строка или что-то еще нужно используйте ключ, mydict[v] даст вам ключError и изменит размер dict даст вам RuntimeError: dictionary changed size during iteration

0

Для проверки значения необходимо использовать math.isnan.

import math 
result = {k:v for (k,v) in d.iteritems() if not math.isnan(v)}