您可以使用递归的访问者/生成器,它返回叶子的所有路径/值对:
def visit_dict(d, path=[]): for k, v in d.items(): if not isinstance(v, dict): yield path + [k], v else: yield from visit_dict(v, path + [k])
(如果使用Python <3.4 ,请
yield from...用适当的等效项替换)
获取密钥:
>>> ','.join('/'.join(k) for k, v in visit_dict(json_data['sample_dict'][0]))'dict_id,person/person_id,person/name,person/age,family/person_id,family/members/father,family/members/mother,family/members/son,family/family_id,items_id,furniture/type,furniture/color,furniture/size,furniture/purchases'和值:
>>> ','.join(str(v) for k, v in visit_dict(json_data['sample_dict'][0]))'5,15,Martin,18,20,Jose,Maddie,Jerry,2,None,Chair,Brown,Large,[]'



