具有足够大数据的 collections.OrderedDict 的反向插入顺序

问题描述

我正在使用 Python 2.7.5 编写一些脚本,但我发现了一些与 collections.OrderedDict 相关的我无法解释的奇怪行为。假设对于这些示例,saps_to_add = set([1,2,3])

然后,当我这样做时:

>>> mine = [collections.OrderedDict({u'GNCompIdentifie': id,u'DesiredAdminState': u'IN_SERVICE'}) for id in saps_to_add]
>>> mine
[OrderedDict([(u'GNCompIdentifie',1),(u'DesiredAdminState',u'IN_SERVICE')]),OrderedDict([(u'GNCompIdentifie',2),3),u'IN_SERVICE')])]

我得到了通常的预期输出。但是,当我添加一个字母并将 u'GNCompIdentifie 更改为 u'GNCompIdentifier' 时,我得到以下反向输出

>>> theirs = [collections.OrderedDict({u'GNCompIdentifier': id,u'DesiredAdminState': u'IN_SERVICE'}) for id in saps_to_add]
>>> theirs
[OrderedDict([(u'DesiredAdminState',u'IN_SERVICE'),(u'GNCompIdentifier',1)]),OrderedDict([(u'DesiredAdminState',2)]),3)])]

我尝试将 u'GNCompIdentifier' 的长度更改为几个不同的值,看看这会对输出产生什么影响;据我所知,小于 u'GNCompIdentifie' 的尺寸出现在正确的插入顺序中,但是 大于或等于 u'GNCompIdentifier' 的大小取决于字符串长度的奇偶校验。以正确的顺序插入奇数长度,但以相反顺序插入偶数长度。

另外:

>>> for i in range(25):
...     del mine
...     mine = [collections.OrderedDict({u'GNCompIdentifier!!!!!': id,u'DesiredAdminState': u'IN_SERVICE'}) for id in saps_to_add]
...     mine

始终如一地产生正确的输出(以正确的顺序插入,因为 u'GNCompIdentifier!!!!!' 的长度为 21,这是奇数),因此所有这些都必须有一些潜在的模式。

我对导致这种行为的原因完全感到困惑,非常感谢任何帮助/建议!提前致谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)