最佳的数据结构可保存许多具有不同键的字典

时间:2018-12-05 19:14:52

标签: python dictionary data-structures

问题是要保存字典以进行数据分析,以便可以扩展。 我正在执行10000个搜索,并根据结果为每个查询保存一个词典。最后,我得到如下字典:

{
'query_1' : {'has_result': True (or False),
             'direct_result': True (or False),
             'title': "title_1",
             'summary': "summary_1",
             'infobox': {'header_11': "data_11",
                         'header_12': "data_12",
                          .
                          .
                          .
              }
'query_2' : {'has_result': True (or False),
             'direct_result': True (or False),
             'title': "title_2",
             'summary': "summary_2",
             'infobox': {'header_21': "data_21",
                         'header_22': "data_22",
                          .
                          .
                          .
              }
.
.
.
}

问题部分显然是“信息框”。我不知道每个“信息框”将获得多少个键值对(通常不超过50个)。而且每个信息框的密钥都应有所不同。

现在,我只能想到以下将数据保存为csv的方法。

+---------+------------+---------------+---------+-----------+----------------+--------------+
|  query  | has_result | direct_result |  title  |  summary  | infobox_header | infobox_data |
+---------+------------+---------------+---------+-----------+----------------+--------------+
| query_1 | TRUE       | TRUE          | title_1 | summary_1 | header_1       | data_1       |
| query_1 | TRUE       | TRUE          | title_1 | summary_1 | header_2       | data_2       |
| query_1 | TRUE       | TRUE          | title_1 | summary_1 | header_3       | data_3       |
| query_1 | TRUE       | TRUE          | title_1 | summary_1 | header_4       | data_4       |
| query_1 | TRUE       | TRUE          | title_1 | summary_1 | header_5       | data_5       |
| query_2 | TRUE       | FALSE         | title_2 | summary_2 | header_1       | data_1       |
| query_2 | TRUE       | FALSE         | title_2 | summary_2 | header_2       | data_2       |
| query_2 | TRUE       | FALSE         | title_2 | summary_2 | header_3       | data_3       |
| query_2 | TRUE       | FALSE         | title_2 | summary_2 | header_4       | data_4       |
+---------+------------+---------------+---------+-----------+----------------+--------------+

我的解决方案的问题是'title'和'summary'是一个字符串变量。对于10000个查询,这并不是什么大问题。我最终得到大约200,000行。但我只是在考虑是否从理论上讲,这是保存此字典以进行数据分析的最佳方法。

如果将来我使用100,000或1,000,000个查询该怎么办?您将如何解决这个问题?您会从一开始就使用不同的数据结构吗?以及如何准备进行数据分析?

1 个答案:

答案 0 :(得分:0)

对于使用Python进行数据分析,最好的选择是使用一个类。值得庆幸的是,有第三方库提供了此功能,例如Pandas

以下解决方案使用@MaxU's explode recipe

import pandas as pd

# construct dataframe from dictionary of dictionaries, d
df = pd.DataFrame.from_dict(d, orient='index').rename_axis('query').reset_index()

# extract header & data, drop infobox
df['header'] = df['infobox'].map(list)
df['data'] = df['infobox'].map(lambda x: list(x.values()))
df = df.drop('infobox', 1)

# expand dataframe
res = explode(df, ['header', 'data'])

print(res)

     query  has_result  direct_result    title    summary     header     data
0  query_1        True          False  title_1  summary_1  header_11  data_11
1  query_1        True          False  title_1  summary_1  header_12  data_12
2  query_2       False           True  title_2  summary_2  header_21  data_21
3  query_2       False           True  title_2  summary_2  header_22  data_22

选择存储是一个广泛的问题,它取决于您的用例,需求,现有的基础结构等。通常,您可能会发现Pickle和HDF5足够了。 HDF5具有可移植性。