首页 > 解决方案 > 从列表中的几个元素中解析一些值的更 Pythonic 方式?

问题描述

有没有更 Pythonic 的方式来编写这段代码?这个 field_split 变量成为 mysql 语句的一部分。如果我解析到的传入 CSV 文件中的时间戳值为空,我需要使用重新格式化这 5 个时间字段dateutil.parser.parse并制作该字段。[6],[7],[8],[9],[44] 是该表的时间戳列。我觉得应该有一种方法可以更多地整合此代码,但不确定如何。 Nonefield_split

                if field_split[6]:
                    field_split[6]= dateutil.parser.parse(field_split[6])
                else:
                    field_split[6]=None

                if field_split[7]:
                    field_split[7]= dateutil.parser.parse(field_split[7])
                else:
                    field_split[7] = None

                if field_split[8]:
                    field_split[8]= dateutil.parser.parse(field_split[8])
                else:
                    field_split[8] = None

                if field_split[9]:
                    field_split[9]= dateutil.parser.parse(field_split[9])
                else:
                    field_split[9] = None

                if field_split[44]:
                    field_split[44] = dateutil.parser.parse(field_split[44])
                else:
                    field_split[44] = None

标签: pythonpython-dateutil

解决方案


感觉像一个循环在这里是合适的:

time_fields = [6,7,8,9,44]
for v in time_fields:
    if field_split[v]:
        field_split[v] = dateutil.parser.parse(field_split[v])
     else:
        field_split[v] = None

另一种更简洁的方法......

set_ = field_split.__setitem__; parse_ = dateutil.parser.parse
[set_(i, parse_(field_split[i])) if field_split[i] else set_(i, None) for i in time_fields]

推荐阅读