Excel表格到python字典
问题描述:
我一直在环顾四周,但不能找到一个简单的解决方案,将我的工作表转换为字典。我的工作表看起来像这样,每个字符串都放在它自己的一行中,前面的列是空的。我可以很容易地把它变成一本字典吗?或者我必须用空格填充空单元格吗?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
答
我不好意思发布此非常混乱的答案用这个,但因为它会在这里是唯一的答案,我会后无论如何。这是我能弄清楚如何从电子表格构建这种嵌套字典的唯一方法。
不幸的是,它是硬编码的 - 它会动态地构建它好得多,如果我能在以后改进它,我会更新。
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
你*实际*有一个Excel文件(如'xls' /'xlsx'文件)还是只是一个CSV文件?为什么你的文件按照你描述的方式设置?你的文件是否为破折号?你想要的结果'Dict'看起来像什么? –
我试图增加一些清晰的问题 – Louvre
你的'.xls'文件内容是这样吗? http://i.imgur.com/CsjdE91.png – davedwards