Я отвечал на один из вопросов о SO и наткнулся на такое поведение OrderedDict
, которое я не смог объяснить. Идет следующим образом
У вас есть диктант, который выглядит так:
exmpl = OrderedDict([(30, ('A1', 55.0)), (31, ('A2', 125.0)), (32, ('A3', 180.0)), (43, ('A4', float('nan')))])
Цель состоит в том, чтобы удалить записи словаря, в которых есть nan
, что может быть выполнено следующими способами:
При использовании for
loop
for k,v in dict_cg.items():
if np.isnan(v[1]):
exmpl.pop(k)
print exmpl
и вывод будет
OrderedDict([(30, ('A1', 55.0)), (31, ('A2', 125.0)), (32, ('A3', 180.0))])
С помощью метода понимания словаря (при определении его как OrderedDict) следующим образом
exmpl = OrderedDict({k:v for k, v in dict_cg.items() if not np.isnan(v[1])})
print exmpl
, который возвращает
OrderedDict([(32, ('A3', 180.0)), (30, ('A1', 55.0)), (31, ('A2', 125.0))])
Может кто-то просветил меня, почему перемешанный словарь во втором случае оказывается перемешанным .?