2014-07-17 52 views
1

我有一個列表的列表,格式如下。這是來自csv的數據,我試圖模擬excel在python中的數據檢查功能。我無法直接在Excel中完成這個工作的唯一原因是這個文檔差不多是1GB,並且有1.1百萬行。自動有效或遞歸數據結構列表的列表

((a1,b1,c1,d1,e1),(a1,b2,c1,d2,e2),(a1,b1,c2,d3,e3),(a2,b1,c1,d3,e4),(a2,b2,c2,d3,e5)...) 

我想將它轉換爲單個數據結構,就像多維數組。像下面

((a1:(b1:(c1:(),c2:()),b2:(),b3:()),a2:(b1:(c1:()),b2:(c2:()),b3:()))) 

我用autovivify類用於其他用途,但我不能在這裏使用它,因爲一些我想要使用的鍵是字符串。在此欣賞幫助。

+0

您應該添加,因爲不是每個人都在「Excel有數據回放功能」的說明(包括我)知道這是做什麼。 –

+0

我站好了。當我說「Excel有數據瀏覽功能」時,我正在討論「數據」選項卡下的「過濾器」功能。 – ash

回答

2

如果我正確理解你的問題,你想要將該列表轉換爲樹狀結構,其中列表中的每個元組代表樹中的一條路徑。爲此,您可以使用嵌套的字典:

def add_to_dict(d, t): 
    if t: 
     first, rest = t[0], t[1:] 
     nested = d.setdefault(first, {}) 
     add_to_dict(nested, rest) 

鑑於字典d(初始爲空)和那些元組t之一,如果元組是不是空的,它需要從數組的第一個元素,增加了一個嵌套的字典到使用此元素作爲關鍵字的原始字典(或者採用一個已存在於此位置的元素),並以相同的方式將該元組的其餘部分添加到該字典中。使用您的數據

例子:

data = (('a1','b1','c1','d1','e1'), 
     ('a1','b2','c1','d2','e2'), 
     ('a1','b1','c2','d3','e3'), 
     ('a2','b1','c1','d3','e4'), 
     ('a2','b2','c2','d3','e5')) 

d = {} 
for t in data: 
    add_to_dict(d, t) 

產生的字典d看起來是這樣的:

{'a1': {'b1': {'c1': {'d1': {'e1': {}}}, 
       'c2': {'d3': {'e3': {}}}}, 
     'b2': {'c1': {'d2': {'e2': {}}}}}, 
'a2': {'b1': {'c1': {'d3': {'e4': {}}}}, 
     'b2': {'c2': {'d3': {'e5': {}}}}}} 
+0

我會試試看。 – ash

+0

是的,它的工作。我不得不修改最後一部分以獲得第三個元素的列表中的最後兩個元素,我做了並且工作正常。謝謝您的幫助 :) – ash