简而言之:检查python中的巨大列表是否已更改的禁区方法是什么?hashlib需要一个缓冲区,并且构建该列表的字符串表示是不可行的.
总之:我有一个巨大的字典列表代表数据.我对这些数据进行了大量分析,但是所有分析都需要一些元数据方面,即.主题集(列表中的每个词典都有一个主题键,有时我只需要一个列表,其中包含数据集中存在数据的所有主题.).所以我想实现以下内容:
class Data:
def __init__(self, ...):
self.data = [{...}, {...}, ...] # long ass list of dicts
self.subjects = set()
self.hash = 0
def get_subjects(self):
# recalculate set of subjects only if necessary
if self.has_changed():
set(datum['subject'] for datum in self.data)
return self.subjects
def has_changed(self):
# calculate hash of self.data
hash = self.data.get_hash() # HOW TO DO THIS?
changed = self.hash == hash
self.hash = hash # reset last remembered hash
return changed
Run Code Online (Sandbox Code Playgroud)
问题是如何实现该has_changed方法,或者更具体地说,get_hash(每个对象已经有一个 …