0

我有以下需要排序的数据结构。对于作为一组具有相同高度的物品的每个箱子,我需要获得面积总和和重量总和,并按比例对箱子进行排序。

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)

问题是这会返回一个列表。无论如何要保留字典对象。我应该将其转换为迭代器吗?

4

2 回答 2

2

Sorted()返回一个列表,因为字典无法排序。该结构不存储订单。

另一种解决方案是使用OrderedDict. 这是一个字典,它会记住您插入项目的顺序。因此,您不能真正“排序”和 OrderedDict,但您可以将结果或 sorted() 函数存储在新的 OrderedDict 中。

有关更多详细信息,请参阅此问题:

如何对 OrderedDict 的 OrderedDict 进行排序 - Python

于 2013-02-03T20:18:50.697 回答
1

字典本质上是无序的。你不能对它们进行排序。你可以用谷歌搜索“SortedDict”的实现,它就像字典,但也允许排序。

于 2013-02-03T20:08:52.200 回答