python中的直方图来自词典列表

时间:2016-05-16 13:41:05

标签: python list dictionary histogram

我有一个词典列表:

list_of_dicts = [{'user':user1, 'yob':1984, 'saves':24, 'hidden':28},
{'user':user2, 'yob':1989, 'saves':7, 'hidden':51}, {...}, ...]

我想制作一个堆积的直方图,表示保存并隐藏在y轴和y轴上的x轴上。因此,直方图应按 yob 进行分组,并将列表中每个字典的保存或隐藏数加起来。例如,如果有3个带有共同yob 1998的字典,保存为8,19和4,那么yob 1998的总保存应该是31,而保存的hist图形应该是1998年的高度31。所以类似:< / p>

plt.hist([list_of_dicts['yob']['saves'], list_of_dicts['yob']['hidden']],
bins=45, stacked=True)
plt.show()

不确定语法是否正确或如何正确访问列表中的元素,任何人都可以帮忙吗?谢谢 *编辑:我知道你不能使用字符串索引列表(list_of_dicts [&#39; yob&#39;])但这就是我被困住并提出问题的地方。

1 个答案:

答案 0 :(得分:3)

你可以先将所有内容放在一个字典中,

master_dict = {}
# initialize the arrays first
for key in list_of_dicts[0]:
    master_dict[key] = [d[key] for d in list_of_dicts]

然后,使用pandas'yob'

import pandas as pd
df = pd.DataFrame(master_dict)
bins = numpy.linspace(df.yob.min(), df.yob.max(), 45)
cut = pd.cut(df.yob, bins)
group = df.groupby(cut)

以下几行为您提供yob分类的其他每个字典项的总和:

nsaves = group.saves.sum()
nhidden = group.hidden.sum()

然后您可以使用plt.stepplt.bar使用上面定义的区域进行绘图:

plt.step(bins[:-1], nsaves, color='r', where='pre')
plt.step(bins[:-1], nhidden, color='b', where='pre')