在Python中拆分元组 - 最佳实践?

and*_*ers 13 python tuples

我的Python代码中有一个方法返回一个元组 - 一个SQL查询中的一行.假设它有三个字段:(jobId,label,username)

为了便于在函数之间传递它,我将整个元组作为一个名为"job"的变量传递.然而,最终,我想得到这些位,所以我一直在使用这样的代码:(jobId,label,username)= job

然而,我已经意识到这是一个维护噩梦,因为现在我永远不会在不破坏所有现有代码的情况下向结果集中添加新字段.我该怎么写这个?

以下是我最好的两个猜测:(jobId,label,username)=(job [0],job [1],job [2])...但是当你有15 ... 20个字段时,它不能很好地扩展

或者直接将SQL查询的结果转换为字典并传递给它(我无法控制它作为一个元组开始生活的事实,这对我来说是固定的)

Aar*_*paa 14

@Staale

有一个更好的方法:

job = dict(zip(keys, values))
Run Code Online (Sandbox Code Playgroud)


Chr*_*rch 13

我会说字典绝对是最好的方法.它易于扩展,允许您为每个值赋予一个合理的名称,并且Python具有许多用于使用和操作字典的内置语言功能.如果以后需要添加更多字段,则需要更改的是将元组转换为字典的代码以及实际使用新值的代码.

例如:

job={}
job['jobid'], job['label'], job['username']=<querycode>
Run Code Online (Sandbox Code Playgroud)


JAB*_*JAB 5

这是一个老问题,但......

我建议在这种情况下使用一个命名元组:collections.namedtuple

特别是这部分你觉得很有用:

子类化对于添加新的存储字段没有用.相反,只需从_fields属性创建一个新的命名元组类型.

  • 其他好处:*namedtuple*方法比字典使用更少的内存,它支持更新值的\ _replace()方法. (2认同)