def transposition(data: dict, prefix: list = None):
prefix = prefix[:] if prefix else []
if isinstance(data, dict):
for k, v in data.items():
if isinstance(v, dict):
yield from transposition(v, prefix=prefix + [str(k)])
elif isinstance(v, list):
for index, ele in enumerate(v):
yield from transposition(data=ele, prefix=prefix + [str(k)] + [str(index)])
else:
yield prefix + [str(k)] + [str(v)]
else:
yield prefix + [str(data)]
昨天业务有个需求, 这个需求经过我的抽象之后,其实就是做一个json的对比,但是这个json的数据结果比较深,第一个痛点就是存在层次的结果没有办法好好的进行线性对比,我的想法是把json转成一个线性的东西,这个想法有点像矩阵的转置,于是我就想到到递归,采用递归的方法记录json的每个值的路径,这么说可能不太容易理解,我举个例子
结果就是这样的
很遗憾这个需求被砍了。 实现的代码在下面,用python写的
注意
yield from
语法, 应该是python的版本>=3.3才可以用哦