我希望创建一个数据结构,它的行为类似于字典,但有一种额外的功能,即跟踪哪些键已经被“使用”。请注意,我不能只是弹出正在被重用的值。
该结构应支持以下三种情况,即在访问时将键标记为已使用:
这是我写的内容:
该结构应支持以下三种情况,即在访问时将键标记为已使用:
if key in d:
...
d[key]
d.get(key)
这是我写的内容:
这是我所写的:
class DictWithMemory(dict):
def __init__(self, *args, **kwargs):
self.memory = set()
return super(DictWithMemory, self).__init__(*args, **kwargs)
def __getitem__(self, key):
self.memory.add(key)
return super(DictWithMemory, self).__getitem__(key)
def __contains__(self, key):
self.memory.add(key)
return super(DictWithMemory, self).__contains__(key)
def get(self, key, d=None):
self.memory.add(key)
return super(DictWithMemory, self).get(key, d)
def unused_keys(self):
"""
Returns the list of unused keys.
"""
return set(self.keys()).difference(self.memory)
由于我对字典的内部机制不是很熟悉,是否有更好的方法来实现这个结果?
unused_keys()
函数?如果你使用修饰器来在 setter 中添加键值到一个集合中,同时在 getter 中移除这个集合中的键值,它可能会有更好的性能表现。但是 优雅 这一部分不太确定。 - Aprillionunused_keys
应该返回一个列表?它没有固有的顺序,因此返回一个集合是有意义的。 - Thomas Kin
、.get()
等修改了,那我会感到非常惊讶。 http://en.wikipedia.org/wiki/Principle_of_least_astonishment - NPEunused_keys
现在返回一个集合。 - badzil