最有效的电子表格数据实现

时间:2012-02-15 19:01:08

标签: python dictionary nested-lists

我使用非常大的电子表格数据(大部分是数字数据)做了很多工作。我一直在使用嵌套列表来处理数据,通过索引访问属性。我最近被告知这不是处理这类数据的一种非常有效的方法。

我很好奇是否有更有效的方法使用词典来构造这种类型的数据。

例如,如果我有一个通常看起来像嵌套列表的电子表格:

sheet = [['ACCOUNT', 'VALUE1', 'VALUE2', 'VALUE3'],
        ['Account1', '3.4332', '2.524', '4,567.23'],
        ['Account2', '1,235.67', '8.98', '4,321.78']]

如何使用(嵌套?)字典进行设置,以便我可以通过"帐户"密钥和"标题"键? (基本上很容易访问Account1,Value2)

在迭代帐户并提取帐户/值对以进行比较/变异时,我更倾向于从性能角度来看实现是否有效。 (我对从一天到下一天的数组进行了大量分析,其中数组结构保持不变,但数值数据发生了变化)。

5 个答案:

答案 0 :(得分:3)

row_iter = iter(sheet)
keys = next(row_iter)[1:]
data = {}
for row in row_iter:
    data[row[0]] = dict(zip(keys, row[1:]))

创建字典

{'Account1': {'VALUE1': '3.4332', 'VALUE2': '2.524', 'VALUE3': '4,567.23'},
 'Account2': {'VALUE1': '1,235.67', 'VALUE2': '8.98', 'VALUE3': '4,321.78'}}

您现在可以通过以下方式访问字段: data['Account1']['VALUE2']

答案 1 :(得分:1)

sheet = {'Account1': {'Value1': '3.4332', 'Value2': '2.524', 'Value3': '4,567.23'},
         'Account2': {'Value1': '1,235.67', 'Value2': '8.98', 'Value3': '4,321.78'}}

>>> sheet['Account1']['Value2']
'2.524'

答案 2 :(得分:1)

你应该使用numpy。该软件包具有非常有效的2d阵列实现。

答案 3 :(得分:1)

我将数据存储在2d矩阵中,然后使用字典按名称查找列/行。

答案 4 :(得分:1)

如果您的列标题不经常更改,您可能最好将两者结合使用 - 对行使用字典,但为每行中的列保留带有整数索引的列表。例如:

columns = {'VALUE1': 1, 'VALUE2': 2, 'VALUE3': 3}
sheet = {
         'Account1': ['3.4332', '2.524', '4,567.23'],
         'Account2': ['1,235.67', '8.98', '4,321.78'],
        }

这使您不必将列名重复存储为字典键,同时仍然可以快速查找帐户名。

查找看起来像这样:

val = sheet['Account1'][columns['VALUE2']]

dict namedtuple也可以有效地执行此操作,而不是dictlist s + dict个键