如何使用if/else条件构造复杂列表?

2024-05-19 15:52:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要构建一个Python列表Dict对象,将其传递给API(boto3),以便将数据插入AWS Aurora无服务器数据库。表列的数据以变量(gv_col1、gv_col2等)的形式提供。API输入不允许我指定一个变量,如果它是None,在这种情况下,我需要传递'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构建这样的列表?请举个例子


Tags: 数据namenoneapi列表valuecol2col3
2条回答

制作一个函数来构建处理其中逻辑的参数

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),
                    ]

列表理解可能会有所帮助,但与嵌套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)]

相关问题 更多 >