OrderedDict 重置:订单丢失
OrderedDict reinitialisation: order is lost
我的 class 继承自 OrderedDict,我想重新初始化字典。但是下面的简化代码仅更改键的值 - 元素的顺序保持不变:
from collections import OrderedDict
class Example(OrderedDict):
def __init__(self,d):
OrderedDict.__init__(self,d)
#something that should be done only once - at instance creation
def reinit(self,d):
OrderedDict.__init__(self,d)
d=Example([(1,1),(2,2)])
d.reinit([(2,20),(1,10)])
print(d) #Example([(1, 10), (2, 20)])
所以问题是:这里 OrderedDict.__init__
内部发生了什么,它应该以这种方式工作吗?
OrderedDict.__init__()
不清除字典。它仅使用 self.update()
的等效项将元素添加到字典中。您所做的只是添加 已经存在的密钥 .
您必须先删除这些键或完全清除字典:
def reinit(self, d):
self.clear()
OrderedDict.__init__(self, d)
演示:
>>> from collections import OrderedDict
>>> class Example(OrderedDict):
... def reinit(self, d):
... self.clear()
... OrderedDict.__init__(self, d)
...
>>> d=Example([(1,1),(2,2)])
>>> d.reinit([(2,20),(1,10)])
>>> print(d)
Example([(2, 20), (1, 10)])
您可以随时查看大多数 Python 库模块的源代码; collections
documentation links you to the source code with the OrdededDict
class.
我的 class 继承自 OrderedDict,我想重新初始化字典。但是下面的简化代码仅更改键的值 - 元素的顺序保持不变:
from collections import OrderedDict
class Example(OrderedDict):
def __init__(self,d):
OrderedDict.__init__(self,d)
#something that should be done only once - at instance creation
def reinit(self,d):
OrderedDict.__init__(self,d)
d=Example([(1,1),(2,2)])
d.reinit([(2,20),(1,10)])
print(d) #Example([(1, 10), (2, 20)])
所以问题是:这里 OrderedDict.__init__
内部发生了什么,它应该以这种方式工作吗?
OrderedDict.__init__()
不清除字典。它仅使用 self.update()
的等效项将元素添加到字典中。您所做的只是添加 已经存在的密钥 .
您必须先删除这些键或完全清除字典:
def reinit(self, d):
self.clear()
OrderedDict.__init__(self, d)
演示:
>>> from collections import OrderedDict
>>> class Example(OrderedDict):
... def reinit(self, d):
... self.clear()
... OrderedDict.__init__(self, d)
...
>>> d=Example([(1,1),(2,2)])
>>> d.reinit([(2,20),(1,10)])
>>> print(d)
Example([(2, 20), (1, 10)])
您可以随时查看大多数 Python 库模块的源代码; collections
documentation links you to the source code with the OrdededDict
class.