Python按其项目的总和对字典进行排序

时间:2013-02-03 19:19:20

标签: python sorting dictionary

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

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)

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

2 个答案:

答案 0 :(得分:2)

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

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

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

How to sort OrderedDict of OrderedDict - Python

答案 1 :(得分:1)

词典本质上是无序的。你无法对它们进行排序。你可以谷歌周围的“SortedDict”的实现,它像一个字典,但也允许排序。

相关问题