【问题标题】:How to construct complex list with if/else condition?如何使用 if/else 条件构造复杂列表?
【发布时间】:2021-04-26 10:38:18
【问题描述】:

我需要构建一个 Python list-Dict 对象以传递给 API (boto3),以便将数据插入 AWS Aurora Serverless 数据库。表列的数据在变量(gv_col1、gv_col2 等)中可用。如果变量为 None,API 输入不允许我指定变量,在这种情况下,我需要传递 'isNull': True。

我正在构建这样的列表-

v_sql_parameters =  [
                           {'name': 'col1', 'value':{'stringValue': gv_col1}},
                           {'name': 'col2', 'value':{'longValue': gv_col2}},
                           {'name': 'col3', 'value':{'longValue': gv_col3}},
                           {'name': 'col4', 'value':{'stringValue': gv_col4}},
                           {'name': 'col5', 'value':{'doubleValue': gv_col5}}
                       ]

                

但是如果 gv_col1 是 None,它应该变成

v_sql_parameters =  [
                        {'name': 'col1', 'isNull': True},
                        {'name': 'col2', 'value':{'longValue': gv_col2}},
                        {'name': 'col3', 'value':{'longValue': gv_col3}},
                        {'name': 'col4', 'value':{'stringValue': gv_col4}},
                        {'name': 'col5', 'value':{'doubleValue': gv_col5}}
                    ]

如何在 Python 中构建这样的列表?请提供任何示例。

【问题讨论】:

    标签: python python-3.x list lambda


    【解决方案1】:

    创建一个函数来构建处理内部逻辑的参数。

    def make_param(name, valuetype, value):
        if (value == None):
            return {'name': name, 'isNull': True }
        else:
            return {'name': name, 'value':{valuetype: value}},
    
    v_sql_parameters =  [
                            make_param('col1', 'stringValue', gv_col1),
                            make_param('col2', 'longValue', gv_col2),
                            make_param('col3', 'longValue', gv_col3),
                            make_param('col4', 'stringValue', gv_col4),
                            make_param('col5', 'doubleValue', gv_col5),
                        ]
    

    【讨论】:

    • 感谢@Statement。这确实解决了我的问题。
    【解决方案2】:

    列表推导式可能会有所帮助,但与嵌套的 if else 相比,它也可能使代码在以后变得更不可读。

    首先创建一个包含所有变量值的列表

    gv_cols = [gv_col1,gv_col2,gv_col3,...] 
    

    还有一个包含所有类型的列表

    gv_cols_types = ['longValue','stringValue',...]
    

    然后将它们压缩在一起

    gv_cols_list = zip(gv_cols_types,gv_cols)
    
    v_sql_parameters = [{'name': 'col'+str(i+1), 'value':{col[0]: col[1]}} if col[1] != None else {'name': 'col'+str(i+1), 'isNull': True} for i,col in enumerate(gv_cols_list)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-08
      • 2019-04-25
      • 2011-02-15
      • 2018-09-08
      • 2019-10-21
      • 2022-01-07
      • 2016-10-06
      • 1970-01-01
      相关资源
      最近更新 更多