Python:合并两个任意数据结构
发布时间:2020-12-20 11:30:43 所属栏目:Python 来源:网络整理
导读:我希望有效地合并两个(相当任意的)数据结构:一个表示一组默认值,另一个表示覆盖.以下示例数据. (天真地对结构进行迭代工作,但速度非常慢.)关于处理此案例的最佳方法的想法? _DEFAULT = { 'A': 1122,'B': 1133,'C': [ 9988,{ 'E': [ { 'F': 6666,},],}_OVER
我希望有效地合并两个(相当任意的)数据结构:一个表示一组默认值,另一个表示覆盖.以下示例数据. (天真地对结构进行迭代工作,但速度非常慢.)关于处理此案例的最佳方法的想法?
_DEFAULT = { 'A': 1122,'B': 1133,'C': [ 9988,{ 'E': [ { 'F': 6666,},],} _OVERRIDE1 = { 'B': 1234,'C': [ 9876,{ 'D': 2345,'E': [ { 'F': 6789,'G': 9876,1357,} _ANSWER1 = { 'A': 1122,'B': 1234,} _OVERRIDE2 = { 'C': [ 6543,{ 'E': [ { 'G': 9876,} _ANSWER2 = { 'A': 1122,'C': [ 6543,} _OVERRIDE3 = { 'B': 3456,'C': [ 1357,{ 'D': 4567,'E': [ { 'F': 6677,2468,} _ANSWER3 = { 'A': 1122,'B': 3456,} 这是如何运行测试的示例: import itertools def mergeStuff( default,override ): # This doesn't work result = dict( default ) result.update( override ) return result def main(): for override,answer in itertools.izip( _OVERRIDES,_ANSWERS ): result = mergeStuff(_DEFAULT,override) print('ANSWER: %s' % (answer) ) print('RESULT: %sn' % (result) ) 解决方法
你不能通过“迭代”来做到这一点,你需要一个像这样的递归例程:
def merge(a,b): if isinstance(a,dict) and isinstance(b,dict): d = dict(a) d.update({k: merge(a.get(k,None),b[k]) for k in b}) return d if isinstance(a,list) and isinstance(b,list): return [merge(x,y) for x,y in itertools.izip_longest(a,b)] return a if b is None else b (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |