2015-09-28 17 views
2

我试图检索每个表名的列清单获得的所有列在列表中使用相同的表名

比方说,我有如下表

('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

您需要提供更多的细节,你使用的是什么类型的数据库是怎样的? – Programmer

+0

你是否在同一个问题上尝试了一些代码?任何片段? –

+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()] 
+0

完美!非常感谢你。 – Skypain

相关问题