gpt4 book ai didi

python - 反转未知深度的嵌套字典

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

我正在尝试获取如下所示的字典:

{1:{2:{3:{4:'foo'}}}}

看起来像这样:

'foo': [1,2,3,4]

字典嵌套到未知深度。这绝对是在考验我的递归知识。

到目前为止,我有这个。我认为这行得通。但是,我想知道是否有更多的 pythonic 方法来执行此操作:

def denest(nested_dict):
denested_dict = {}
for k, v in nested_dict.items():
if isinstance(v, dict):
sub_dict = denest(v)
for t, s in sub_dict.items():
sub_dict[t] +=[k]
denested_dict.update(sub_dict)
else:
denested_dict[v] = [k]

return denested_dict

最佳答案

您可以跟踪已看到的键:

def build_new(_d, seen = []):
[[a, b]] = _d.items()
return {b:seen+[a]} if not isinstance(b, dict) else build_new(b, seen+[a])

print(build_new({1:{2:{3:{4:'foo'}}}}))

输出:

{'foo': [1, 2, 3, 4]}

但是,上述解决方案只有在每个字典只有一个键时才有效。要通用地查找所有路径,请使用 yield:

def all_paths(d, seen = []):
for a, b in d.items():
if not isinstance(b, dict):
yield {b:seen+[a]}
else:
yield from all_paths(b, seen+[a])

d = {1:{2:{3:'bar', 4:'foo', 5:{6:'stuff'}}}}
print(list(all_paths(d)))

输出:

[{'bar': [1, 2, 3]}, {'foo': [1, 2, 4]}, {'stuff': [1, 2, 5, 6]}]

关于python - 反转未知深度的嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52787057/

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