重写di的itervalues

2024-10-04 01:25:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类TimedCache(dict),它为每个值保留一个tuple(value, timestamp)。在

如何重写itervalues函数以仅返回value而忽略{}。我还是希望它是一个迭代器。在


Tags: 函数valuedicttimestamptupleitervaluestimedcache
2条回答

您可能需要创建自己的MutableMapping(来自collections的抽象基类)以获得更高的一致性。在

实现的唯一方法是__iter____len____getitem____setitem__和{}。在

它们由以下方法使用(已实施): __contains__keysitemsvaluesiterkeysiteritemsitervaluesget__eq__,和{}。在

以下是根据任意条件筛选项目的字典示例:

class FilteredDict(MutableMapping):

    def accept(self, key):
        # Only accept items with interger key and string value
        return isinstance(key, int) and isinstance(self[key], str)

    def __init__(self, *args, **kwargs):
        self.dict = dict(*args, **kwargs)

    def __getitem__(self, key):
        return self.dict[key]

    def __setitem__(self, key, value):
        self.dict[key] = value

    def __delitem__(self, key):
        del self.dict[key]

    def __len__(self):
        return sum(1 for _ in self)

    def __iter__(self):
        for key in self.dict:
            if self.accept(key):
                yield key

    def __repr__(self):
        return repr(dict(self))

    def __str__(self):
        return str(dict(self))

示例:

^{pr2}$

我找到了一个解决方案,但我想知道是否有更好的解决方案:)

def itervalues(self):
    for value, timestamp in super(TimedCache, self).itervalues():
        if time.time() - timestamp <= self.ttl:
            yield value

相关问题 更多 >