用Python解压缩列表

时间:2016-08-19 14:18:15

标签: list python-2.6

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

SELECT statement:
sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)

然后我用光标执行它并拔出如下的列。

   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]

是否可以在一个语句中分配所有列名?类似的东西:

for row in results:
    fname, lname, age, sex, income = unpack(row)

我总是这样做:

fname, lname, age, sex, income = row[0], row[1], row[2], row[3], row[4]

但是我的桌子上有超过30列,这很痛苦。 请注意,虽然我现在正在使用MySQL,但我希望它尽可能与数据库无关;我们仁慈的霸主可能决定随时将所有东西移植到另一个数据库。

3 个答案:

答案 0 :(得分:5)

只是做:

fname, lname, age, sex, income = row

如果len(row)==5它应该有效,否则,如果你有python 3,你可以使用extended iterable unpacking

fname, lname, age, sex, income, *other = row

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

如果你有python 2: 您可以使用此answer中的小函数:

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)

如果你只想要5个第一个元素,就像@ Ev.Kounis所说,你可以这样做:

fname, lname, age, sex, income = row[:5]

答案 1 :(得分:1)

完全不同的方法怎么样?

您可以使用DictCursor并按名称引用内容。例如,

cursor = db.cursor(MySQLdb.cursors.DictCursor)
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
    function_with_fname(row['fname'])
    function_with_age(row['age'])

答案 2 :(得分:0)

results = [[1,2,3,4,5],
['a', 'b', 'c', 'd', 'e'],
[True, False, True, False, True]
]

for one, two, three, four, five in results:
    print one, two, three, four, five
>>> 1 2 3 4 5
>>> a b c d e
>>> True False True False True

您还可以在for循环中解压缩值。