我正在尝试检索每个表名的列列表
我们说我有下表
('tableA', 'columnA', 1)
('tableA', 'columnB', 2)
('tableB', 'columnA', 1)
('tableB', 'columnB', 2)
('tableC', 'columnA', 1)
('tableD', 'columnA', 1)
如何返回按相同表名分组的列表? 所以它返回以下
('tableA', 'columnA', 'columnB')
('tableB', 'columnA', 'columnB')
('tableC', 'columnA')
('tableD', 'columnA')
答案 0 :(得分:1)
您可以使用itertools.groupby
。请注意,这需要首先按表名对列表进行排序,但无论如何它似乎都是在你的情况下。否则,先排序。
get_data_from_table.sort() # only if not already sorted
tables = [[key] + [g[1] for g in groups]
for (key, groups) in itertools.groupby(get_data_from_table,
key=operator.itemgetter(0))]
或者使用字典(或defaultdict
),将表名映射到列:
d = collections.defaultdict(list)
for t, c, n in get_data_from_table:
d[t].append(c)
tables = [[key] + values for key, values in d.items()]