映射函数从对象加载字典

时间:2019-05-14 20:57:38

标签: python dictionary

我正在做我的第一个非凡的python项目。

我从API响应中加载了许多字典。我使用的SDK将API响应作为对象返回,该对象包括JSON响应结果作为对象属性的子集。我对所有JSON数据都不感兴趣,因此我创建的字典是JSON和结果对象中数据的子集。我知道我需要提前的对象路径并且它是持久的。这是我在python中编写的ETL(提取,转换,加载)过程的一部分。我要从许多对象中提取许多字段,并因此重复许多代码。我想让事情变得更清楚。

当前,这种情况(反复发生):

    arrayObj = apiReponse.somearray

    for obj in arrayObj:
       my_dict = {
          'id': obj.id,
          'n_fields': obj.n_fields
          'field': obj.field
       }
       somelist.append(my_dict)

       for nestedobj in obj.moredata:
          nested = {
             'id': nestedobj.id,
             'parentid': obj.id,
             'anotherfield': nestedobj.next.field,
             'andsoforth': nestedobj.otherattr
          }
          anotherlist.append(nested)
    '''some more stuff'''
    load_list_to_db(somelist)
    load_list_to_db(nested)

有时对象字段嵌套,有时一个对象嵌套在另一个(nestedobj.next.field)中。我正在研究一对多关系,并将JSON展平为关系实体。再次,这很混乱。

我一直在想类似的东西:

  • 一个保存未来词典“模式”的文件,也许是一个以空词典为属性的模式类
  • 类似的东西保存指向所需对象属性的路径
  • 与它们匹配并使用getattr()或类似的函数来检索必要值的函数
    arrayObj = apiReponse.somearray      
    for obj in arrayObj:
       my_dict = mapping_function(obj,'type_of_object_name')
       somelist.append(    
       # or even somelist.append(mapping_function(obj,'type_of_object_name'))   
    '''more stuff'''
    load_list_to_db(somelist)

这是一种合理的方法吗?高/中级,我将如何实施?

更新:

我进行了编辑,试图进一步阐明我的问题。我知道我可以使用getattr()通过名称而不是路径来检索属性。我不知道是否可以使用getattr()作为路径。我发现this answer揭示了如何使用getattr()获取嵌套属性。但是,我仍然不确定我概述的方法是否有效,或者是否有更好的方法。

0 个答案:

没有答案