如何在python中将整列附加到表(列表列表)?

时间:2013-09-19 15:53:39

标签: python mysql list tuples

给出如下的元组,这些元组是从循环中的mysql fetchall调用生成的......

tuple1 = (('doug', 6), ('fred', 9), ('garth', 3))
tuple2 = (('steve', 3), ('dan', 1))
tuple3 = (('alan', 5), ('tom', 8), ('bob', 3), ('joe', 8))

如何将每个元组作为整列附加到表格(列表列表)中?

table = [['doug',6,'steve',3,'alan',5],
         ['fred',9,'dan',1,'tom',8],
         ['garth',3,'',,'bob',3],
         ['',,'',,'joe',8]]

1 个答案:

答案 0 :(得分:1)

因为列表大小不同,zip()在这里没用,所以我们必须实现我们自己的zip - 类函数,它接受不同长度的列表,用{填充缺少的元素{1}}:

None

接下来,将所有元组放在一个列表中:

def transpose(lists):
   if not lists: return []
   return map(lambda *row: list(row), *lists)

现在答案很简单,就列表理解而言:

tuple1 = (('doug', 6), ('fred', 9), ('garth', 3))
tuple2 = (('steve', 3), ('dan', 1))
tuple3 = (('alan', 5), ('tom', 8), ('bob', 3), ('joe', 8))
tuples = [tuple1, tuple2, tuple3]

结果如预期:

table = [[y for x in t for y in x or ['']] for t in transpose(tuples)]

关于评论中的问题:如何向现有表添加新列?这是如何:

table
=> [['doug', 6, 'steve', 3, 'alan', 5],
    ['fred', 9, 'dan', 1, 'tom', 8],
    ['garth', 3, '', 'bob', 3],
    ['', '', 'joe', 8]]

继续举例:

def addcolumn(table, column):
    tr = transpose([table, column])
    return [(x if x else []) + (list(y) if y else []) for x, y in tr]