Python-如何实现有序的默认字典?

发布于 2021-02-02 23:14:18

我想结合OrderedDict(),并defaultdict()collections一个对象,这应是一个有序的,默认情况下dict。
这可能吗?

关注者
0
被浏览
116
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    以下内容(使用此食谱的修改版)对我有用:

    from collections import OrderedDict, Callable
    
    class DefaultOrderedDict(OrderedDict):
        # Source: http://stackoverflow.com/a/6190500/562769
        def __init__(self, default_factory=None, *a, **kw):
            if (default_factory is not None and
               not isinstance(default_factory, Callable)):
                raise TypeError('first argument must be callable')
            OrderedDict.__init__(self, *a, **kw)
            self.default_factory = default_factory
    
        def __getitem__(self, key):
            try:
                return OrderedDict.__getitem__(self, key)
            except KeyError:
                return self.__missing__(key)
    
        def __missing__(self, key):
            if self.default_factory is None:
                raise KeyError(key)
            self[key] = value = self.default_factory()
            return value
    
        def __reduce__(self):
            if self.default_factory is None:
                args = tuple()
            else:
                args = self.default_factory,
            return type(self), args, None, None, self.items()
    
        def copy(self):
            return self.__copy__()
    
        def __copy__(self):
            return type(self)(self.default_factory, self)
    
        def __deepcopy__(self, memo):
            import copy
            return type(self)(self.default_factory,
                              copy.deepcopy(self.items()))
    
        def __repr__(self):
            return 'OrderedDefaultDict(%s, %s)' % (self.default_factory,
                                                   OrderedDict.__repr__(self))
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看