gpt4 book ai didi

python - 计算 python 字典/数组数据结构的非空端叶 - 递归算法?

转载 作者:太空宇宙 更新时间:2023-11-04 10:44:57 25 4
gpt4 key购买 nike

我正在寻找一个函数来查找一种复杂字典/数组结构的所有非空端点。我认为因为我不知道嵌套数组的数量或它们的位置,所以它必须是递归的,我只是还没有完全理解这种思维方式。

所以对于嵌套的字典:

x = {"top": {"middle" : [
{"nested": "value"},
{"nested":"val2"},
{"nested":""}
],
"last" : [
{"nested": [
{"first":1,"second":1},
{"first":0,"second":""}
]
},
{"nested": [
{"first":1,"second":1},
{"first":1,"second":2}
]
},
{"nested": [
{"first":1,"second":1},
{"first":"","second":""}
]
}
]
},
"other":1}

变量“paths”命名如下,其中“.XX”表示有一个数组(variety.js风格):

vars = ["top.middle.XX.nested",
"top.last.XX.nested.XX.first",
"top.last.XX.nested.XX.second",
"other"]

我想要一个可以返回...的函数f(x,y)

f(x,"top.middle.XX.nested") = 2/3
f(x,"top.last.XX.nested.XX.first") = 5/6
f(x,"top.last.XX.nested.XX.second") = 4/6
f(x,"other") = 1

对我来说,问题似乎是尝试构建树,以及将空值计数器放在哪里。所以,我不太明白如何正确记录计数器或进行递归。

最佳答案

也许这可以为您指明正确的方向。 byPath 收集嵌套的字典项。调用后,您基本上可以展开结果列表并检查是否满足您的条件(例如 elem != ''not elem 或其他):

x = #your x as posted

def byPath (tree, path):
try: head, tail = path.split ('.', 1)
except: return tree [path]

if head == 'XX': return [byPath (node, tail) for node in tree]
else: return byPath (tree [head], tail)


print (byPath (x, 'top.middle.XX.nested') )
print (byPath (x, 'top.last.XX.nested.XX.first') )
print (byPath (x, 'top.last.XX.nested.XX.second') )
print (byPath (x, 'other') )

编辑:这里是实际计算那些不是空字符串的元素的部分:

def count (result):
if isinstance (result, list):
total = 0
positive = 0
for e in result:
r = count (e)
total += r [1]
positive += r [0]
return (positive, total)
else: return (0 if result == '' else 1, 1)

a = byPath (x, 'top.middle.XX.nested')
b = byPath (x, 'top.last.XX.nested.XX.first')
c = byPath (x, 'top.last.XX.nested.XX.second')
d = byPath (x, 'other')

for x in [a, b, c, d]: print (count (x) )

将所有内容放在一起:

def f (tree, path):
return count (byPath (tree, path) )

for path in ['top.middle.XX.nested', 'top.last.XX.nested.XX.first', 'top.last.XX.nested.XX.second', 'other']:
print (path, f (x, path) )

关于python - 计算 python 字典/数组数据结构的非空端叶 - 递归算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18069262/

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