我在回答关于 SO 的其中一个问题时偶然发现了 OrderedDict 的这种行为,我无法解释。它进行如下 你有一个看起来像这样的字典:
exmpl = OrderedDict([(30, ('A1', 55.0)), (31, ('A2', 125.0)), (32, ('A3', 180.0)), (43, ('A4', float('nan')))])
目标是删除包含nan的字典条目,可以通过以下方式完成:
使用
for循环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))])
有人可以教育我,为什么在第二种情况下字典会出现困惑。?
请您参考如下方法:
因为您正在创建一个带有字典理解的普通字典,它具有任意顺序,您将其传递给OrderedDict 构造函数之后。
