在Python中拆分元组 - 最佳实践?
我在Python代码里有一个方法,它返回一个元组,也就是从SQL查询中得到的一行数据。假设这个元组有三个字段: (jobId, label, username)
为了方便在不同的函数之间传递这个数据,我一直把整个元组当作一个叫'job'的变量来用。不过,最终我想要单独获取这些字段,所以我用这样的代码来拆分它: (jobId, label, username) = job
但我意识到这样做维护起来很麻烦,因为如果我想在结果中添加新的字段,就会导致我之前写的所有代码都出问题。那么我应该怎么写呢?
这是我想到的两个解决办法: (jobId, label, username) = (job[0], job[1], job[2]) ...但当字段有15到20个的时候,这种方法就不太好用了。
或者直接把SQL查询的结果转换成字典,然后再传递这个字典(我无法控制它一开始是元组这一点,这对我来说是固定的)。
9 个回答
5
这是个老问题,不过...
我建议在这种情况下使用命名元组:collections.namedtuple
特别是这里的内容,你会觉得很有用:
子类化(也就是从一个类派生出新的类)并不适合用来添加新的存储字段。相反,你只需要从 _fields 属性创建一个新的命名元组类型就可以了。
14
@Staale
有更好的方法:
job = dict(zip(keys, values))
13
我觉得用字典来处理这个问题绝对是最好的选择。字典很容易扩展,你可以给每个值起个合适的名字,而且Python有很多内置的功能可以用来操作字典。如果你以后需要添加更多的字段,只需要修改把元组转换成字典的那段代码,以及使用新值的那段代码就可以了。
比如说:
job={}
job['jobid'], job['label'], job['username']=<querycode>