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

transforming nested dictionaries into various lists

我有一个仓库开始和结束数量的嵌套字典。我想用 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()

要获取日期,只需检查您的截止日期:

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"])