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')])]

通常の予想される出力が得られます。しかし、もう1 文字追加して に変更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', 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