2015-09-28 40 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

相關問題