gpt4 book ai didi

python - 如何检测字典中的任何元素是否发生变化?

转载 作者:太空狗 更新时间:2023-10-29 21:16:41 26 4
gpt4 key购买 nike

而不是保存字典的副本并比较旧的和新的,就像这样:

dict = { "apple":10, "pear":20 }

if ( dict_old != dict ):
do something
dict_old = dict

如何检测字典的任何元素何时发生变化?

最佳答案

您可以子类化 dict 并包含一些自定义的 __setitem__ 行为:

class MyDict(dict):
def __setitem__(self, item, value):
print "You are changing the value of %s to %s!!"%(item, value)
super(MyDict, self).__setitem__(item, value)

示例用法:

In [58]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:class MyDict(dict):
: def __setitem__(self, item, value):
: print "You are changing the value of %s to %s!!"%(item, value)
: super(MyDict, self).__setitem__(item, value)
:--

In [59]: d = MyDict({"apple":10, "pear":20})

In [60]: d
Out[60]: {'apple': 10, 'pear': 20}

In [61]: d["pear"] = 15
You are changing the value of pear to 15!!

In [62]: d
Out[62]: {'apple': 10, 'pear': 15}

您只需将 print 语句更改为包含您在修改时需要执行的任何检查。

如果您问的是如何检查特定变量名称是否被修改,这是一个更棘手的问题,尤其是如果修改不是在对象上下文或可以专门监视它的上下文管理器中发生的。

在这种情况下,您可以尝试修改globalslocals 指向的dict(取决于在你希望它发生的范围内)并将其切换出去,例如上面的 MyDict 之类的实例,除了您自定义创建的 __setitem__ 可以只检查正在更新的项目是否与您要检查的变量名称匹配。那么就像您有一个后台“观察者”一样,它会密切关注该变量名称的变化。

不过,这是一件非常糟糕的事情。其一,这将涉及对 localsglobals 进行一些严重的破坏,这通常不是很安全。但也许更重要的是,通过创建一些容器类并在其中创建自定义更新/检测代码,实现起来要容易得多。

关于python - 如何检测字典中的任何元素是否发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26189090/

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