我一直在四处寻找,但无法找到将我的工作表转换为字典的简单解决方案。我的工作表看起来像这样,每个字符串都放在自己的行中,前面的列是空的。我可以轻松地将其转换为字典,还是必须用值填充空单元格?
为清晰起见进行编辑:破折号仅用于表示值前面的空列。我有数据的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
答案 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']}]}
在得到更好的答案之前,我希望这会有所帮助。