Python 如何复制MongoDB';s在嵌套字典中动态展开功能
我希望以这样一种方式规范化数据:数组中的任何值都会导致两个单独的dictionary对象,这样每个期望的键都有一个关联的值 为了获取一个有助于突出显示我想要的I/O的示例用例,让我们假设我正在尝试展平一个嵌套的JSON对象 现在,在我看到的大多数示例中,我遍历嵌套字典并递归调用一个函数,如果键值对中的值是dict,则该函数将键名与任何类型的分隔符连接起来,如果是列表,则使用索引值代替键名,如果这两种类型都不是iterable,只需将对象干净地传递出去 例如,以下示例dict:Python 如何复制MongoDB';s在嵌套字典中动态展开功能,python,python-3.x,Python,Python 3.x,我希望以这样一种方式规范化数据:数组中的任何值都会导致两个单独的dictionary对象,这样每个期望的键都有一个关联的值 为了获取一个有助于突出显示我想要的I/O的示例用例,让我们假设我正在尝试展平一个嵌套的JSON对象 现在,在我看到的大多数示例中,我遍历嵌套字典并递归调用一个函数,如果键值对中的值是dict,则该函数将键名与任何类型的分隔符连接起来,如果是列表,则使用索引值代替键名,如果这两种类型都不是iterable,只需将对象干净地传递出去 例如,以下示例dict: [ {
[
{
"fruit": {
"type": "apple",
"color": "green"
}
},
{
"fruit": {
"type": "pear",
"color": "yellow"
}
},
{
"fruit": {
"type": "grape",
"color": ["red", "green"]
}
}
]
理想情况下,可能会返回与此更接近的内容:
[
{
"fruit.type": "apple",
"fruit.color": "green"
},
{
"fruit.type": "pear",
"fruit.color": "green"
},
{
"fruit.type": "grape",
"fruit.color": "green"
},
{
"fruit.type": "grape",
"fruit.color": "red"
}
]
请注意,大多数用例都会将“葡萄”字典转换为与以下内容更相似的内容:
{
"fruit.type": "grape",
"fruit.color.1": "green",
"fruit.color.2": "red"
}
这是不可取的。我使用的此类代码示例如下:
def flatten_json(dictionary):
out = {}
def flatten(object, name=""):
if type(object) is dict:
for key in object:
flatten(object[key], name + key + ".")
elif type(object) is list:
i = 0
for element in object:
flatten(element, name + str(i) + ".")
i += 1
else:
out[name[:-1]] = object
flatten(dictionary)
return out
对于上下文,底层用例是确保我识别行为或记录的完全唯一实例,以便在多种类型的数据集之间进行更灵活的表示(例如在datatable/csv中)、排序、分组等。我更希望有4条记录,其中每个值都是单数(即没有数组/可数)