1

为什么 OrderedDict 和普通 dict 的行为不同?

当我在字典中放入两个带有 NaN 的条目时,OrderedDict 只是跳过它们并且不识别它们。

我尝试将条目按不同的顺序排列,也尝试了“NaN”,但没有任何帮助

from collections import OrderedDict
import numpy as np

ordered_dict = OrderedDict([(np.nan, 0), (np.nan, 0.01), (np.nan, 
0.02)])


print(ordered_dict)

结果是

OrderedDict([(nan, 0.02)])

normal_dict = {(np.nan, 0), (np.nan, 0.01), (np.nan, 0.02)}

print(normal_dict)

{(nan, 0.02), (nan, 0), (nan, 0.01)}
4

2 回答 2

1

你的第二个例子是settuples三个不同的)而不是dict

type({(np.nan, 0.02), (np.nan, 0), (np.nan, 0.01)})
# <class 'set'>

adict将以这种方式创建(并按预期运行):

normal_dict = dict(((np.nan, 0), (np.nan, 0.01), (np.nan, 0.02)))
# {nan: 0.02}

对于这两种类型,一个键 ( np.nan) 只能出现一次 - 因此其他条目会丢失(应该如此)。

根据您的需要,您可能需要不同的数据结构来保存数据。

于 2019-08-19T12:52:45.037 回答
0

我想 OrderedDict 类正在用相同的键覆盖值。请注意,如果您更改列表的顺序,结果也会发生变化:

ordered_dict = OrderedDict([(np.nan, 0), (np.nan, 0.02), (np.nan, 0.01)])

print(ordered_dict)  # OrderedDict([(nan, 0.01)])
于 2019-08-19T12:59:23.330 回答