优化数据结构以保存多个具有不同键的字典

2024-09-26 22:42:35 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是保存一个用于数据分析的字典,以便它可以扩展。 我正在执行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",
                          .
                          .
                          .
              }
.
.
.
}

有问题的部分显然是“infobox”。我不知道每个infobox会得到多少个键值对(通常不超过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个查询来说,这不是什么大事。我最后大概有20万排。但我只是在想,从理论上讲,这是否是保存这本词典用于数据分析的最佳方法

如果将来我使用100000或1000000个查询呢?你将如何着手解决这个问题?你会从一开始就使用不同的数据结构吗?你将如何为数据分析做好准备


Tags: orfalsetruedata字典titleresultsummary
1条回答
网友
1楼 · 发布于 2024-09-26 22:42:35

对于Python的数据分析,最好的选择是使用类。谢天谢地,有第三方库提供了这种功能,比如Pandas

下面的解决方案使用@MaxU's ^{} 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提供了可移植性优势

相关问题 更多 >

    热门问题