创建命名元组时,如何替换值?

When creating a namedtuple, how do I substitute a value?

我正在使用 JSON 格式从 NHTSA API 提取数据。然后我从这个数据和其他一些来源创建一个命名元组,并将其用作记录插入到 MySQL 数据库中。

NHTSA API 使用 '' 指定一个空值,该值不是数据库中该特定列的可接受值。该列只允许 float 数据类型。

创建我的命名元组时,如果返回特定值,有没有办法替换 None? IE。如果 API 调用 returns '',请改用 None

返回的错误是

Failed inserting object into MySQL table Error while executing statement: Data truncated for column 'weight' at row 1

元组是不可变的,因此您需要创建一个新的元组

这是一个例子


old = (1,2,'ABC','','','','text')

new = tuple(None if x == '' else x for x in old)

输出:
现在 new 包含:

(1, 2, 'ABC', None, None, None, 'text')

请参阅 this 线程以获取更多信息

要以更简单的方式替换 namedtuple / NamedTuple 中的一个特定字段值,您可以使用 _replace() 方法。

Point = namedtuple('Point', 'x,y')
p = Point(x=11, y=22)
p = p._replace(x=33)
print(p)

它将打印:

Point(x=33, y=22)

_replace() 用它的值替换关键字参数指定的字段,returns 一个新的 namedtuple 用那个值和从旧的 [=12= 复制的其余值].