随着世界越来越多地接受非结构化数据,我们遇到了许多格式的数据,其中数据结构可以像嵌套的JSONS一样深层嵌套。Python具有通过将内部键与外部键连接以使数据平坦化来处理嵌套数据结构的能力。在本文中,我们将使用嵌套字典并将其展平。
在这种方法中,我们设计了一个函数来递归处理字典中的每个项目。我们传递字典,为输出字典设计占位符,将键和分隔符作为参数。我们使用isinstance检查下一项本身是否是字典,然后如果它也是字典,则通过递归调用将其传递。
dictA = { "id": "0001", "name": "hotdog", "image": { "url": "images/0001.jpg", "thumbnail": { "url": "images/thumbnails/0001.jpg", "height,width": "2x4" } } } def dict_flatten(in_dict, dict_out=None, parent_key=None, separator="_"): if dict_out is None: dict_out = {} for k, v in in_dict.items(): k = f"{parent_key}{separator}{k}" if parent_key else k if isinstance(v, dict): dict_flatten(in_dict=v, dict_out=dict_out, parent_key=k) continue dict_out[k] = v return dict_out final_dict = dict_flatten(dictA) print(final_dict)
运行上面的代码给我们以下结果-
{ 'id': '0001', 'name': 'hotdog', 'image_url': 'images/0001.jpg', 'image_thumbnail_url': 'images/thumbnails/0001.jpg', 'image_thumbnail_height,width': '2x4' }
这是一个模块,可以通过将字典作为输入来直接使用。默认的分隔符是-。
from cherrypicker import CherryPicker dictA = { "id": "0001", "name": "hotdog", "image": { "url": "images/0001.jpg", "thumbnail": { "url": "images/thumbnails/0001.jpg", "height,width": "2x4" } } } picker = CherryPicker(dictA) print(picker.flatten().get())
运行上面的代码给我们以下结果-
{ 'id': '0001', 'name': 'hotdog', 'image_url': 'images/0001.jpg', 'image_thumbnail_url': 'images/thumbnails/0001.jpg', 'image_thumbnail_height, width': '2x4' }