我正在回答关于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))])
有人能教育我,为什么第二种情况下的字典混乱变成混乱??
答案 0 :(得分:4)
因为您要创建具有字典理解能力的普通字典,字典具有任意顺序,因此您可以将其传递给java -jar target/test-SNAPSHOT.jar "$(realpath "$1")" "$(realpath "$2")"
构造函数 。
答案 1 :(得分:2)
就像@timgeb提到的那样,在3.6之前的Python版本中,字典顺序实际上是随机的。如果您仍想在Python 3.5及以下版本中使用理解,则可以使用元组的列表理解:
OrderedDict([(k, v) for k, v in dict_cg.items() if not np.isnan(v[1])])