gpt4 book ai didi

python - 我如何展平字典的深度仅超过 3 个级别

转载 作者:行者123 更新时间:2023-11-28 18:57:54 25 4
gpt4 key购买 nike

假设你有这本字典

{
"alpha": "one",
"beta": {
"beta1": "two",
"beta2": "second two"
},
"gamma": {
"delta": {
"delta1": "three",
"delta2": "second three"
},
"epsilon": {
"zeta": {
"zeta1": "four",
"zeta2": "second four"
},
"epsilon1": "five",
"epsilon2": "second five"
}
}
}

并且您希望将每第 3 个(或更深的)嵌套字典展平。所以像这样的输出。

{
"alpha": "one",
"beta": {
"beta1": "two",
"beta2": "second two"
},
"gamma": {
"delta": {
"delta1": "three",
"delta2": "second three"
},
"epsilon": {
"zeta.zeta1": "four",
"zeta.zeta2": "second four",
"epsilon1": "five",
"epsilon2": "second five"
}
}
}

如何实现这一目标?

字典的标签和结构是动态的(我想重构具有不同结构的多个字典,但每三个嵌套字典都有一个硬线)

我知道我可以遍历每个值,但我怎么知道我到达第三个嵌套字典的时间?

def loopDict(d):
for k, v in d.iteritems():
if type(v) is dict:
loopDict(v)
else:
print "{0} : {1}".format(k, v)

附言我可以使用 flatten_json 模块

展平每个字典

最佳答案

最简单的方法是将这一步分成两步。遍历 input_dictionary 到所需的目标深度。然后在最里面的字典上调用一个展平函数:

def flatten(d):
for key, value in list(d.items()):
if isinstance(value, dict):
del d[key]
for subkey, subvalue in value.items():
newkey = key + '.' + subkey
d[newkey] = subvalue

for v1 in input_dict.values():
if isinstance(v1, dict):
for v2 in v1.values():
if isinstance(v2, dict):
flatten(v2)

这个输出:

{'alpha': 'one',
'beta': {'beta1': 'two', 'beta2': 'second two'},
'gamma': {'delta': {'delta1': 'three', 'delta2': 'second three'},
'epsilon': {'epsilon1': 'five',
'epsilon2': 'second five',
'zeta.zeta1': 'four',
'zeta.zeta2': 'second four'}}}

如果需要更通用的东西,可以使其中一个或两个步骤递归。

希望这有帮助:-)

关于python - 我如何展平字典的深度仅超过 3 个级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56074828/

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