2017-04-11 116 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