我有一个 struct 相当复杂的Python字典——多层嵌套值,其中一些是dict,一些是list.我想用一种简洁的方式来表示数据的变化,这样可以很容易地apply.
对于仅使用字典的值,这似乎不太难——您可以制作一个dict,反映主数据的 struct ,但只包括其父数据上修改过的键,并调用一个稍微修改过的.update(),在需要完全删除密钥时检测墓碑值.
但由于涉及 list ,它似乎变得更加棘手.似乎我需要想出某种定制的寻址方案,需要考虑很多情况——你不能简单地使用列表索引作为键,因为你需要支持,例如,在元素2和3之间插入的同时删除元素5.
此外,如果列表不局限于叶子,那么在修改列表元素的同时指定对列表中包含的项目的更改是很棘手的.
有没有一个Python库可以标准化这样的东西?还是一种相对合理的标准算法/方法?
作为参考,下面是一个函数,它实现了我所寻找的dict纯数据:
def update(d, u):
for k, v in u.items():
if v == 'del':
del d[k]
elif isinstance(v, collections.abc.Mapping):
d[k] = update(d.get(k, {}), v)
else:
d[k] = v
return d
>>> d = {1: 2, 3: {4: 5, 6: 7}}
>>> delta = {3: {4: 'del', 6: 8}, 9: 10}
>>> update(d, delta)
{1: 2, 3: {6: 8}, 9: 10}