给出如下的元组,这些元组是从循环中的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]]
答案 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]