创建命名元组时,如何替换值?
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= 复制的其余值].
我正在使用 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= 复制的其余值].