gpt4 book ai didi

python - 我需要一个 python 函数从任意深度的数组中提取元素

转载 作者:行者123 更新时间:2023-11-30 22:30:05 25 4
gpt4 key购买 nike

我需要在 python 函数中处理数组中的元素 - 如果元素不存在,我想分配一个默认值。但要处理的元素可以是数组中的任意深度。即,有时我需要这样做:

x=myFunc(myArray,"element","here")

但有时是这样的:

x=myFunc(myArray,"deeper","element","here")

甚至

x=myFunc(myArray,"even","deeper""element","here")

因此,为了实现这一目标,我编写了效率极低的函数 myFunc

def myFunc(myDict,*args):
if len(args) == 2 :
try:
returnValue=myDict[args[0]][args[1]]
except KeyError:
returnValue="Some default value"
elif len(args) == 3 :
try:
returnValue=myDict[args[0]][args[1]][args[2]]
except KeyError:
returnValue="Some default value"
elif len(args) == 4 :
try:
returnValue=myDict[args[0]][args[1]][args[2]][args[3]]
except KeyError:
returnValue="Some default value"
return returnValue

是的,我知道我可以直接将值分配给 x 并将除了 KeyError: 放在这些分配周围,但当然我已经将示例简化为简化它。

我知道必须有一种更好的方法从任意深度的数组中提取元素 - 如果我可以将 args 从 ("list","of","elements") 更改为 [ "list"]["of"]["elements"] 我想我会拥有它。

有什么想法吗?

这是我使用上述内容进行的示例测试:

def main():
myDict = {
"first": {
"second1": "2",
"second2": "22",
"deeper": {
"third1": "3",
"third2": "33"
}
}
}

x=myFunc(myDict,"first","second1")
print "x should be 2. And x is...",x
x=myFunc(myDict,"first","deeper","third2")
print "x should be 33. And x is...",x
x=myFunc(myDict,"first","hopefullyGetDefaultReturned")
print "x should be 'Some default value'. And x is...",x


main()

最佳答案

循环:

def get_by_path(value, *path):
for key in path:
value = value[key]

return value

默认情况下:

def get_or_default(value, default, *path):
try:
return get_by_path(value, *path)
except KeyError:
return default

关于python - 我需要一个 python 函数从任意深度的数组中提取元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46166299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com