Excel表格到python dict

时间:2017-04-11 21:09:54

标签: python-3.x

我一直在四处寻找,但无法找到将我的工作表转换为字典的简单解决方案。我的工作表看起来像这样,每个字符串都放在自己的行中,前面的列是空的。我可以轻松地将其转换为字典,还是必须用值填充空单元格?

为清晰起见进行编辑:破折号仅用于表示值前面的空列。我有数据的xls和csv文件。 dict应该将第一列作为键,然后将第二列和第三列作为“子键(?)”和第四行作为值。该表格看起来像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 个答案:

答案 0 :(得分: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']}]}

在得到更好的答案之前,我希望这会有所帮助。