在 python 3 中是否有一种优雅的方法来实现这一点?它应该展平字典,同时将列表索引视为键,从而将它们包含在展平中。
在:
{
"a": 1,
"b": {
"c": 2
},
"d": [3,4],
"e": [
{
"f": 5
},
{
"g": 6
}
]
}
输出:
{
"a": 1,
"b.c": 2,
"d.0": 3,
"d.1": 4,
"e.0.f": 5,
"e.1.g": 6
}
背景:
- 我们正在寻找一种方法来合并包含列表的嵌套字典
- 可用的合并工具似乎总是使用追加策略或替换策略来合并列表
- 但是,我们需要合并列表内的字典(如示例中所示)。例如,列表中的第一个字典应与列表中的第一个字典合并
- 当前的方法是这样链接:
展平 -> 合并 -> 取消展平
。问题只是关于扁平的部分。从那以后我们发现,展平更加棘手 - 我们最好使用现有的强大库
最佳答案
一种可能是利用 flatten-json图书馆。
它提供了 flatten、unflatten 和 unflatten_list 函数。
在您的用例中,需要 flatten 和 unflatten_list 函数。
from flatten_json import flatten, unflatten_list
d = {
"a": 1,
"b": {
"c": 2
},
"d": [3,4],
"e": [
{
"f": 5
},
{
"g": 6
}
]
}
desired_result = {
"a": 1,
"b.c": 2,
"d.0": 3,
"d.1": 4,
"e.0.f": 5,
"e.1.g": 6
}
d_flat = flatten(d, separator=".")
print(d_flat == desired_result) # True
d_unflat = unflatten_list(d_flat, separator=".")
print(d == d_unflat) # True
关于Python 3 : Flatten Dictionary including lists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74157806/