0

我在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), (u'DesiredAdminState', u'IN_SERVICE')]),
 OrderedDict([(u'GNCompIdentifie', 3), (u'DesiredAdminState', u'IN_SERVICE')])]

我得到了通常的预期输出。但是当我再添加一个字母并更改为时u'GNCompIdentifieu'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', u'IN_SERVICE'), (u'GNCompIdentifier', 2)]),
OrderedDict([(u'DesiredAdminState', u'IN_SERVICE'), (u'GNCompIdentifier', 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,这是奇数),因此所有这些都必须有一些潜在的模式。

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

4

0 回答 0