我需要从一些大的嵌套字典中获取一些值.出于懒惰,我决定编写一个递归调用自身的函数,直到找到最后一个子元素,或者叶子为空.
由于有字典弹出,每次新调用都有一个新的字典,我想知道它有多高效.
有什么建议?
def recursive_dict_get(item, string, default=False):
if not isinstance(item, dict):
return default
print "called with ", item, "and string", string
if "." in string:
attrs = string.split(".")
parent = attrs.pop(0)
rest = ".".join(attrs)
result = item.get(parent, None)
if result is None:
return default
else:
return recursive_dict_get(item.get(parent, default), rest, default)
else:
return item.get(string, default)
Run Code Online (Sandbox Code Playgroud)
foo = {
"1": {
"2": {
"3": {
"4":{
"5": {
"6": {
"7": "juice"
}
}
}
}
}
}
}
print recursive_dict_get(foo, "1.2.3.4.5.6.7", False)
print "*" * 3
print recursive_dict_get(foo, "1.2.3.4.5.6", False)
print "*" * 3
print recursive_dict_get(foo, "1.3", False)
Run Code Online (Sandbox Code Playgroud)
我的一个建议是提出split()第二个论点.你可以做一些更简单的事情:
parent, rest = string.split(".", 1)
Run Code Online (Sandbox Code Playgroud)
除此之外,我发现代码没有立即出现的问题.
您也可以在没有递归的情况下执行此操作:
def recursive_dict_get(item, string, default=False):
for s in string.split('.'):
if (isinstance(item, dict) and s in item):
item = item[s]
else:
return default
return item
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |