我期待有效地合併兩個(相當任意的)數據結構:一個代表一組默認值,一個代表覆蓋。下面的示例數據。 (天真地遍歷結構的作品,但速度很慢。)關於處理這種情況的最佳方法的想法?Python:合併兩個任意數據結構
_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, 'C': [ 9876, { 'D': 2345, 'E': [ { 'F': 6789, 'G': 9876, }, 1357, ], }, ], } _OVERRIDE2 = { 'C': [ 6543, { 'E': [ { 'G': 9876, }, ], }, ], } _ANSWER2 = { 'A': 1122, 'B': 1133, 'C': [ 6543, { 'E': [ { 'F': 6666, 'G': 9876, }, ], }, ], } _OVERRIDE3 = { 'B': 3456, 'C': [ 1357, { 'D': 4567, 'E': [ { 'F': 6677, 'G': 9876, }, 2468, ], }, ], } _ANSWER3 = { 'A': 1122, 'B': 3456, 'C': [ 1357, { 'D': 4567, 'E': [ { 'F': 6677, 'G': 9876, }, 2468, ], }, ], }
這是如何運行測試的例子:(字典更新不工作,只是一個存根函數)
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))
什麼是預期的輸出? – TerryA
我認爲_ANSWER是合併_DEFAULT和_OVERRIDE的預期結果 – aragaer
您可以顯示您的「天真迭代」代碼,特別是當您提到它的作品。 –