2010-01-07 196 views
0
class SortedDict(dict): 
    def __new__(cls, *args, **kwargs): 
      instance = super(SortedDict, cls).__new__(cls, *args, **kwargs) 
      instance.keyOrder = [] 
      return instance 
    def __setitem__(self, key, value): 
      super(SortedDict, self).__setitem__(key, value)#@1 
      if key not in self.keyOrder:#@2 
       self.keyOrder.append(key) 

为什么要@ 2,为什么要做一个'keyOrder'列表。'@ 1'和'@ 2'之间有什么关系

感谢

回答

3

SortedDict是“一个字典,它保持它们的键的插入顺序。” (见:documentation)。

您的@ 1行将键值对存储在字典中。 @ 2将密钥存储在内部列表中以维护订单。

2

因为这是一个排序字典。字典通常是未排序的,所以此实现添加keyOrder来记录项目添加的顺序。

相关问题