_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:合并两个任意数据结构所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)