用Python解压缩列表

Cra*_*aig 3 list python-2.6

假设我有一个MySQL表,我通过My​​SQLDB访问.我有一个标准

SELECT statement:
sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
Run Code Online (Sandbox Code Playgroud)

然后我用光标执行它并拔出列,如下所示.

   cursor.execute(sql)
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
Run Code Online (Sandbox Code Playgroud)

是否可以在单个语句中分配所有列名?就像是:

for row in results:
    fname, lname, age, sex, income = unpack(row)
Run Code Online (Sandbox Code Playgroud)

我总能这样做:

fname, lname, age, sex, income = row[0], row[1], row[2], row[3], row[4]
Run Code Online (Sandbox Code Playgroud)

但是我的桌子上有30多列,这很痛苦.请注意,虽然我现在正在使用MySQL,但我希望它尽可能与数据库无关; 我们仁慈的霸主可能决定在任何时候将一切都移植到另一个数据库.

jrj*_*rjc 5

做就是了:

fname, lname, age, sex, income = row
Run Code Online (Sandbox Code Playgroud)

如果len(row)==5它应该工作,否则,如果你有python 3你可以使用扩展的可迭代解包

fname, lname, age, sex, income, *other = row
Run Code Online (Sandbox Code Playgroud)

other 将是所有剩余元素的列表.

如果你有python 2:你可以在这个答案中使用一个小函数:

def unpack_list(a, b, c, d, e, *f):
    return a, b, c, d, e, f

fname, lname, age, sex, income, other = unpack_list(*row)
Run Code Online (Sandbox Code Playgroud)

如果您只想要5个第一个元素,如@ Ev.Kounis所示,您可以:

fname, lname, age, sex, income = row[:5]
Run Code Online (Sandbox Code Playgroud)