"소비 된"키를 추적하는 기능이 추가 된 사전처럼 작동하는 데이터 구조를 만들고 싶습니다. 값을 재사용 할 때 값을 팝 할 수는 없습니다.액세스 된 키의 메모리가있는 파이썬 사전?
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)
나는 매우 익숙하지 나처럼 :
if key in d:
...
d[key]
d.get(key)
이 내가 쓴 것입니다 : 소비로 액세스 할 때
구조는이 세 가지 사례를 지원해야한다, 즉 같은 키를 표시 dict의 내부 구조는이 결과를 얻는 더 좋은 방법이 있습니까?
가 얼마나 자주 사용합니까'unused_keys :이 정말 더 우아한 있는지 확실하지 않습니다,하지만 당신이 사용하는 키를 저장하는 방법에 대한 당신의 마음을 변경해야합니다 캡슐화의 일부 금액을 제공한다 ? setter에 키를 추가하여 getter가이 세트에서 키를 제거하려고 시도했을 때 더 나은 성능을 제공 할 수 있습니다. ** 우아함 ** 부분에 대해서는 확실하지 않습니다. – Aprillion
: 'unused_keys'가 명부? 본질적인 순서는 없으므로 집합을 반환하는 것이 좋습니다. –
@ 토마스 K : 대칭성을 위해서'keys'가 목록을 반환합니다. – badzil