Skip to main content
 首页 » 编程设计

python之OrderedDict 的行为

2025年05月04日15lyj

我在回答关于 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))]) 

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

请您参考如下方法:

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