python - 插入值时如何存储dict的差异?

标签 python python-3.x dictionary recursion diff

我需要有效地拥有一个 diff 字典,告诉我在某个时间点和现在的主要字典之间有什么区别。

我需要有更改内容的完整路径,而不仅仅是更改的值。

例如:

primary_dict = {'a': 5, 'b':{'c': 9}, 'd':10}

区别是

diff_dict = {'a':6, 'b':{'c':8}}

目前来说

primary_dict = {'a':6, 'b':{'c':8}, 'd':10}

我可以在向字典添加值时创建差异

我在网上看过,但只发现了 2 部词典之间的比较,这会很低效,因为我需要比较的词典很大,保存它 2 次并递归地比较它似乎对手头的问题很有帮助

编辑: 将问题更改为更准确。 就像我被告知反射(reflect)我的需要的问题是: 如何在不创建新变量的情况下随时间对字典进行更改? 感谢@CristiFati 和@Vishnudev 的更正

最佳答案

使用dictdiffer

>>> from dictdiffer import diff
>>> before_change = {'a': 5, 'b':{'c': 9}, 'd':10}
>>> after_change = {'a': 6, 'b':{'c':8, 'd': 10}, 'd':10}
>>> list(diff(before_change, after_change))
[('change', 'a', (5, 6)), ('change', 'b.c', (9, 8)), ('add', 'b', [('d', 10)])]

对于删除的键,

>>> before_change = {'a': 5, 'b':{'c': 9}, 'd':10}
>>> after_change = {'a': 6, 'b':{'d': 10}, 'd':10}
>>> list(diff(before_change, after_change))
[('change', 'a', (5, 6)), ('add', 'b', [('d', 10)]), ('remove', 'b', [('c', 9)])]

关于python - 插入值时如何存储dict的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56617962/

相关文章:

python - 如何在 python 中创建图形列表?

python - 访问网页中的列表框时出现 NoSuchElementException

python - 如何使用 WTForms 制作具有唯一 id 的多个复选框,以便可以将其存储在架子上?

python - 使用 'time' 获取 AM 或 PM

python - double "for"在列表理解中如何工作?

python - 将字典中每个键的多个值相加?

Java 添加一些值到 Map<..., ?>

python - 使用 Blob 存储触发器将文件解压缩到 Blob 存储中

python - 如何在 matplotlib 中创建引脚图

python - 用户输入的输出字典不正确