Python:合并两个任意数据结构

Python:合并两个任意数据结构,第1张

概述我希望有效地合并两个(相当任意的)数据结构:一个表示一组默认值,另一个表示覆盖.以下示例数据. (天真地对结构进行迭代工作,但速度非常慢.)关于处理此案例的最佳方法的想法? _DEFAULT = { 'A': 1122, 'B': 1133, 'C': [ 9988, { 'E': [ { 'F': 6666, }, ], }, ], 我希望有效地合并两个(相当任意的)数据结构:一个表示一组默认值,另一个表示覆盖.以下示例数据. (天真地对结构进行迭代工作,但速度非常慢.)关于处理此案例的最佳方法的想法?

_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:   %s\n' % (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
总结

以上是内存溢出为你收集整理的Python:合并两个任意数据结构全部内容,希望文章能够帮你解决Python:合并两个任意数据结构所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1192946.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存