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]}}
为此可以使用递归函数:首先,检查模板的类型与原始模板的类型是否相同。如果是这样,你必须为不同的类型做不同的事情。例如,对于列表,您可以将原始列表缩减为模板列表的长度,而对于字典,则只保留模板中的键。在这两种情况下,请记住再次递归调用
trim
函数以获取这些列表或字典中包含的元素。你知道吗示例(请注意,我还将
"c"
的值更改为列表):相关问题 更多 >
编程相关推荐