我有以下需要排序的数据结构。对于每个具有相同高度的一组物品的箱子,我需要得到面积和权重总和的总和,并按比例对箱子进行排序。
bins = {
12 : [
{
length : 12
width : 24
weight : 50
},
{
length : ...
width : ...
weight : ...
}
]
52 : ...
24 : ...
36 : ...
}
bins
中的键是高度,每个bin中都有一个项目列表。
我试图想出一些东西,但我没有运气。
bins = sorted(bins, key=lambda bin: (
sum([item['Length']*item['Width'] for item in bins[bin]]) /
sum([item['Weight'] for item in bins[bin]])
), reverse=True)
问题是这会返回一个列表。无论如何都要保留字典对象。我应该把它作为迭代器吗?
答案 0 :(得分:2)
Sorted()
返回一个列表,因为无法对字典进行排序。
该结构不存储订单。
另一种解决方案是使用OrderedDict
。这是一个字典,可以记住您插入项目的顺序。
所以你不能真正“排序”和OrderedDict,但你可以将结果或sorted()函数存储在一个新的OrderedDict中。
有关详细信息,请参阅此问题:
答案 1 :(得分:1)
词典本质上是无序的。你无法对它们进行排序。你可以谷歌周围的“SortedDict”的实现,它像一个字典,但也允许排序。