假设我在Python中有两个对象(我会保持简单)
A = { "a" : { "b": 3, "c": 2 } }
B = { "a" : { "b": 7, "c": 4, "d": "howdy" } }
如果我想用A作为B的模板,那么" trim"的最佳方法是什么?对象B使它看起来像:
B = { "a" : { "b": 7, "c": 4 } }
在实践中,对象将更加复杂(简单的数据类型,但多级,列表,字典等)。
编辑:删除了荒谬的对象' Obj'修复语法
答案 0 :(得分:0)
您可以使用递归函数:首先,检查模板的类型和原始类型是否相同。如果是这样,你必须为不同的类型做不同的事情。例如,对于列表,您可以将原始列表缩减为模板列表的长度,并且对于字典仅保留模板中的键。在这两种情况下,请记住以递归方式再次为这些列表或词典中包含的元素调用def trim(template, original):
if type(template) != type(original):
raise Exception("Types don't match")
if isinstance(template, dict):
# iterate keys and apply trim to values from orig dictionary
return {k: trim(v, original[k]) for k, v in template.items()}
elif isinstance(template, list):
# zip lists and apply trim to pairs of templ and orig elements
return [trim(t, o) for t, o in zip(template, original)]
else:
# atom: just return the original value
return original
函数。
"c"
示例(请注意,我还将>>> A = { "a" : { "b": 3, "c": [4,5] } }
>>> B = { "a" : { "b": 7, "c": [8,9,10], "d": "howdy" } }
>>> trim(A, B)
{'a': {'b': 7, 'c': [8, 9]}}
的值更改为列表):
badge