您可以使用递归生成器将字典转换为平面列表。
def dict_generator(indict, pre=None): pre = pre[:] if pre else [] if isinstance(indict, dict): for key, value in indict.items(): if isinstance(value, dict): for d in dict_generator(value, pre + [key]): yield d elif isinstance(value, list) or isinstance(value, tuple): for v in value: for d in dict_generator(v, pre + [key]): yield d else: yield pre + [key, value] else: yield pre + [indict]
它返回
[u'body', u'kind', u'var'][u'init', u'declarations', u'body', u'type', u'Literal'][u'init', u'declarations', u'body', u'value', 2][u'declarations', u'body', u'type', u'VariableDeclarator'][u'id', u'declarations', u'body', u'type', u'Identifier'][u'id', u'declarations', u'body', u'name', u'i'][u'body', u'type', u'VariableDeclaration'][u'body', u'kind', u'var'][u'init', u'declarations', u'body', u'type', u'Literal'][u'init', u'declarations', u'body', u'value', 4][u'declarations', u'body', u'type', u'VariableDeclarator'][u'id', u'declarations', u'body', u'type', u'Identifier'][u'id', u'declarations', u'body', u'name', u'j'][u'body', u'type', u'VariableDeclaration'][u'body', u'kind', u'var'][u'init', u'declarations', u'body', u'operator', u'*'][u'right', u'init', u'declarations', u'body', u'type', u'Identifier'][u'right', u'init', u'declarations', u'body', u'name', u'j'][u'init', u'declarations', u'body', u'type', u'Binaryexpression'][u'left', u'init', u'declarations', u'body', u'type', u'Identifier'][u'left', u'init', u'declarations', u'body', u'name', u'i'][u'declarations', u'body', u'type', u'VariableDeclarator'][u'id', u'declarations', u'body', u'type', u'Identifier'][u'id', u'declarations', u'body', u'name', u'answer'][u'body', u'type', u'VariableDeclaration'][u'type', u'Program']
更新 :固定键列表从
[key] + pre到,
pre + [key]如注释中所述。



