0

我很确定这是一个 n00b 问题,但我似乎无法弄清楚。任何帮助表示赞赏。

我有一个生成一系列文件的应用程序,每个文件中都有一个字典,格式如下:

{date1:{key1:result1, key2:result2},date2:{key2:result3}}

我想计算每个值的每日平均值。因此,我想为每个唯一键创建一个字典,以汇总所有文件的结果:

unique_key_dict = {date1:[file1_result, file2_result],date2:[file1_result, file2_result]}

我不会提前知道键的名称或会有多少个唯一键,尽管在我的整个数据集中它不会超过 25 个唯一键,并且出于速度原因,我只想打开每个文件一次。

如何在 Python 中编写以下内容?

for date in file_dict:
    for key in file_dict[date]:
        # if key_dict does not exist from a previous file or date, create it
        # once the dictionary exists, append this value to the list tied to the date key.

我似乎无法弄清楚如何使用键名动态创建字典。如果我动态打印他们的名字,我会这样做"dict_for_%s" % key,但我不想打印,我正在尝试创建字典。

另外,我可以只创建一个庞大的字典……哪个更快?一个庞大的字典还是 15-25 个单独的字典?

4

1 回答 1

2

这是其中的一部分:

unique_key_dict = {}
for date in file_dict:
  for key in file_dict[date]:
    if date not in unique_key_dict: unique_key_dict[date] = []
    unique_key_dict[date].append(file_dict[date][key])

或者也许你想要

unique_key_dict = {}
for date in file_dict:
  for key in file_dict[date]:
    if key not in unique_key_dict: unique_key_dict[key] = {}
    if date not in unique_key_dict[key]: unique_key_dict[key][date] = []
    unique_key_dict[key][date].append(file_dict[date][key])

然后你有一个字典,它将每个键映射到一个字典,这些字典将日期映射到值数组。

之后获得平均值:

for key in unique_key_dict:
  for date in unique_key_dict[key]:
    avg = sum(float(x) for x in unique_key_dict[key][date]) / len(unique_key_dict[key][date])
    print key, date, avg
于 2013-10-15T00:56:24.317 回答