首页 > 解决方案 > OrderdDict 的行为

问题描述

我正在回答关于 SO 的一个问题,我偶然发现了 的这种行为OrderedDict,我无法解释。它如下你有一个看起来像这样的字典:

exmpl  = OrderedDict([(30, ('A1', 55.0)), (31, ('A2', 125.0)), (32, ('A3', 180.0)), (43, ('A4', float('nan')))])

目标是删除其中包含的字典条目,nan可以通过以下方式完成:

  1. 通过使用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))])
    
  2. 通过字典理解方法(同时将其定义为 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))])

有人可以教育我,为什么在第二种情况下字典混乱会出现混乱。?

标签: pythondictionary

解决方案


因为您正在创建一个具有字典理解的普通字典,它具有任意顺序,然后您将其传递给构造OrderedDict函数。


推荐阅读