gpt4 book ai didi

Python:测试字典(dict)条目是否被修改

转载 作者:行者123 更新时间:2023-11-28 17:53:27 25 4
gpt4 key购买 nike

我为 dict 内置类编写了一个小包装器,一旦相应的键是,它就会从 cPickled 文件中加载字典的条目(值)第一次访问。当字典被销毁时,所有加载的条目都会写回磁盘。

现在,如果我可以检查是否有任何值已更改并只写出那些实际上已更改的值,那将很方便。 因此我的问题是:字典是否知道值是否已更改?还是有一种聪明的方法来透明地实现这一点?

为了完整起见,我附上了我使用的代码。它使用存储文件的路径(键用作文件名)和存在文件的键列表调用。

import cPickle

class DictDB(dict):

def __init__(self, path, folders):
self.picklepath = path # path to files on disk
self.folders = folders # available folders
self.loaded_folders = {}

def has_key(self, key):
return key in self.folders

def get(self, key):
if not key in self.loaded_folders.keys():
if not key in self.folders:
raise KeyError("Folder "+key+" not available")
# load from disk
self.loaded_folders[key] = cPickle.load(file(self.picklepath + key + ".cpickle2"))
return self.loaded_folders[key]

def __getitem__(self, key):
return self.get(key)

def close(self):
for folder in self.loaded_folders.keys():
# write back
cPickle.dump(self.loaded_folders[folder], file(picklepath + folder + '.cpickle2', 'w'), 2)

def __del__(self):
self.close()

最佳答案

我可能会使用一种发布-订阅模型来处理它,其中包含字典订阅每个子字典(或其他值)。然后当其中一个被编辑时,它会通知所有包含它的词典。

如果您不希望它们都为此处理连线,并且愿意允许包含的字典仅在访问时或按设定的时间间隔检查更改,您可以让每个包含的对象跟踪一个 version数字。然后当包含字典准备就绪时,它只是检查版本号是否已更改。

最后一种可能性是有一种方法可以可靠地计算就地包含对象的哈希值。这将允许您编写一个外部函数并消除对象跟踪它们自己的版本的需要,但它有其自身的复杂性,因为您要么需要重载 <code>__hash__</code>在所有这些上或写出另一种形式的 hash()可以识别对象并从中获取某种智能哈希值的函数

关于Python:测试字典(dict)条目是否被修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5431185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com