排序对应列表

2024-04-26 17:43:42 发布

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

首先,我的目标是:在matplotlib中生成一个条形图,然后从Django模型中获取数据。你知道吗

为了得到一组解释过的数据,我必须将它们与另一个模型的数据相乘。这就是为什么我不能通过queryset进行排序(至少我认为我不能)

这给我留下了两个列表(每年):标签-字符串-和数据-浮动-

很简单,我可以用sort(data)对数据进行排序,但这显然不会改变标签的顺序。你知道吗

我想到的第一件事是字典,就像元组一样是不变的。你知道吗

有一种订购字典的方法collections是一个很棒的图书馆,但让我烦恼的是,我必须打包一本字典,而不是通过

OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

然后在两个列表中再次解包,将其交给函数

matplotlib.bar(x, values, labels=keys)

这似乎对我来说是非常不雅的,我必须这样做4次(4年的数据)

你将如何解决这个问题?你知道吗

编辑: 关于Django模型的更多信息(草图;)

class EnergieSource(Models):
      name = models.CharField(max_length=30)
      co2 = models.FloatField('CO²-Equivalent')
class EnergieUsage(Models):
      date = models.DateField('Year')
      energiesource = models.ForeignKeyField(EnergieSource)
      usage = models.FloatField('Yearly use in MWh')

不,我将usageco2相乘,并根据能量来源改变数据。你知道吗


Tags: 数据django模型列表字典排序matplotlibmodels
2条回答

多亏了Jornsharpe和martin,我找到了答案,我想和大家分享一下:

#Zip the list
sort_year = list(zip(values, labels))
#Sortig the list
sort_year.sort()
#pitfall: the list will be in reversed order
values, labels = zip(*sort_year)

给你-从大到小排序-我完全惊讶!你知道吗

我认为另一种可能的解决方案是使用numpy阵列:

import numpy as np
values   = np.array(values)
labels   = np.array(labels)
sort_vec = np.argsort( values )[::-1]
values   = values[ sort_vec ]
labels   = labels[ sort_vec ]

相关问题 更多 >