2012-02-15 51 views
2

我用很大的電子表格數據(其中大部分是數字數據)做了很多工作。我一直在使用嵌套列表來處理數據,通過索引訪問屬性。最近我被告知,這不是使用這種類型數據的非常有效的方式。電子表格數據的最有效的實現

我很好奇,如果有一個更有效的方式來使用字典來構造這種類型的數據。

舉例來說,如果我有一個電子表格,通常是這樣的嵌套列表:

sheet = [['ACCOUNT', 'VALUE1', 'VALUE2', 'VALUE3'], 
     ['Account1', '3.4332', '2.524', '4,567.23'], 
     ['Account2', '1,235.67', '8.98', '4,321.78']] 

我怎麼可能設置此爲利用(拼圖?)字典,這樣我可以通過訪問值「帳戶「鍵和」標題「鍵? (基本上很容易訪問Account1,Value2)

在迭代帳戶和提取帳戶/值對以進行比較/變異時,我希望實現從性能角度來看是高效的。 (我從一天到下一天對數組進行大量分析,數組結構保持不變,但數字數據發生變化)。

+0

您是否真的遇到了使用當前方法的性能問題? – 2012-02-15 19:18:41

回答

3
row_iter = iter(sheet) 
keys = next(row_iter)[1:] 
data = {} 
for row in row_iter: 
    data[row[0]] = dict(zip(keys, row[1:])) 

創建字典

{'Account1': {'VALUE1': '3.4332', 'VALUE2': '2.524', 'VALUE3': '4,567.23'}, 
'Account2': {'VALUE1': '1,235.67', 'VALUE2': '8.98', 'VALUE3': '4,321.78'}} 

,你現在可以通過實地例如data['Account1']['VALUE2']

+0

對於我來說,data ['Account1'] ['VALUE2']'的代碼更容易閱讀,但是 - 不計算構建字典的開銷 - 它更「高效」嗎?看起來像一個二維數組將會比嵌套字典佔用更少的空間和執行速度。 – 2012-02-15 19:10:23

1
sheet = {'Account1': {'Value1': '3.4332', 'Value2': '2.524', 'Value3': '4,567.23'}, 
     'Account2': {'Value1': '1,235.67', 'Value2': '8.98', 'Value3': '4,321.78'}} 

>>> sheet['Account1']['Value2'] 
'2.524' 
1

你應該使用numpy。該包有一個非常有效的二維數組實現。

1

我會將數據存儲在2d矩陣中,然後使用字典按名稱查找列/行。

1

如果您的列標題不會經常更改,您最好將它們結合使用 - 爲行使用字典,但爲列中的列保留整數索引。例如:

columns = {'VALUE1': 1, 'VALUE2': 2, 'VALUE3': 3} 
sheet = { 
     'Account1': ['3.4332', '2.524', '4,567.23'], 
     'Account2': ['1,235.67', '8.98', '4,321.78'], 
     } 

這可以讓你不必重複存儲列名作爲字典鍵,同時還讓您的帳戶名的快速查找。

的查找是這樣的:

val = sheet['Account1'][columns['VALUE2']] 

namedtupledict S還將是一種有效地做到這一點,而不是listdict A S +按鍵的dict