将嵌套字典转换为各种列表

时间:2015-01-22 12:55:22

标签: python python-2.7 dictionary

我有一个仓库的起始和结束数量的嵌套字典。我想用matplotlib将这些数据绘制成一个堆栈图。我需要转换数据,以便x值是一个列表,y值是列表的列表。我想将图限制为键,其中键小于或等于截止日期,' cutoff'。我编写了所有代码来编写绘图,但是无法将字典中的数据转换为x和y值。在我的示例中,我在下面手动输入值。在真实的脚本中,我有一个更大的数据集,需要一种方法来实际编码转换。

from datetime import datetime
import matplotlib
import matplotlib.pyplot as plt

d = {
    datetime(2015, 1, 19) : {'start qty': 13 , 'end qty': 12},
    datetime(2015, 1, 20) : {'start qty': 10 , 'end qty': 34},
    datetime(2015, 1, 21) : {'start qty': 30 , 'end qty': 35},
    datetime(2015, 1, 22) : {'start qty': 20 , 'end qty': 40},
}

cutoff = datetime(2015, 1, 21)

y = [[13,10,30],[12,34,35]]
x = [datetime(2015, 1, 19), datetime(2015, 1, 20), datetime(2015, 1, 21)]


plt.stackplot(x,y)
plt.show()

1 个答案:

答案 0 :(得分:1)

要根据您的截止日期检查日期:

x = [x for x in d if x <= cutoff]

对于y,请使用键:

y = [[d[k]['start qty'],d[k]['end qty']] for k in x]

如果您要创建字典并订购数据,请使用orderedDictsort x

为了您的编辑:

x = [dte for dte in d if dte <= cutoff]
y = [[],[]]
for k in x:
    y[0].append(d[k]["start qty"])
    y[1].append(d[k]["end qty"])