2017-04-11 112 views
-1

我一直在環顧四周,但不能找到一個簡單的解決方案,將我的工作表轉換爲字典。我的工作表看起來像這樣,每個字符串都放在它自己的一行中,前面的列是空的。我可以很容易地把它變成一本字典嗎?或者我必須用空格填充空單元格嗎?Excel表格到python字典

爲清楚起見進行編輯:破折號就是代表值前面的空列。我有一個xls和csv文件的數據。字典應該將第一列作爲鍵,然後第二和第三列作爲「子鍵(?)」,第四行作爲值。紙張的樣子this,我我打算在QTreeView則

key 1 
----value 1 
--------value a 
--------value b 
--------value c 
----value 2 
--------value d 
--------value e 
key 2 
----value 3 
--------value f 
--------value g 
--------value h 
----value 4 
--------value i 
--------value j 
+1

你*實際*有一個Excel文件(如'xls' /'xlsx'文件)還是隻是一個CSV文件?爲什麼你的文件按照你描述的方式設置?你的文件是否爲破折號?你想要的結果'Dict'看起來像什麼? –

+0

我試圖增加一些清晰的問題 – Louvre

+1

你的'.xls'文件內容是這樣嗎? http://i.imgur.com/CsjdE91.png – davedwards

回答

1

我不好意思發佈此非常混亂的答案用這個,但因爲它會在這裏是唯一的答案,我會後無論如何。這是我能弄清楚如何從電子表格構建這種嵌套字典的唯一方法。

不幸的是,它是硬編碼的 - 它會動態地構建它好得多,如果我能在以後改進它,我會更新。

import xlrd 

book = xlrd.open_workbook("data.xls") 
sh = book.sheet_by_index(0) 
d = dict(dict()) 

c1 = [str(c.value) for c in sh.col(0) if c.value != ''] 
c2 = [str(c.value) for c in sh.col(1) if c.value != ''] 
c3 = [str(c.value) for c in sh.col(2) if c.value != ''] 

val1 = c2[0] 
val2 = c2[1] 
val3 = c2[2] 
val4 = c2[3] 

v1 = {val1: c3[0:3]} 
v2 = {val2: c3[3:5]} 
v3 = {val3: c3[5:8]} 
v4 = {val4: c3[8:10]} 

k1 = {c1[0]: [v1, v2]} 
k2 = {c1[1]: [v3, v4]} 

d.update(k1) 
d.update(k2) 

然後,印刷詞典:

import pprint 
pprint.pprint(d) 
    {'key 1': [{'value 1': ['value a', 'value b', 'value c']}, 
       {'value 2': ['value d', 'value e']}], 
    'key 2': [{'value 3': ['value f', 'value g', 'value h']}, 
       {'value 4': ['value i', 'value j']}]} 

直到一個更好的答案出現時,我希望這有助於一些。

+0

@Louvre你還想嘗試使行變爲動態嗎? – davedwards