按字典项的总和对字典排序

0 投票
2 回答
861 浏览
提问于 2025-04-17 14:37

我有一个数据结构需要排序。每个“箱子”代表一组高度相同的物品,我需要计算这些箱子的面积总和和重量总和,然后根据它们的比例来排序这些箱子。

bins = {
  12 : [
    {
      length : 12
      width  : 24
      weight : 50
    },
    {
      length : ...
      width  : ...
      weight : ...
    }
  ]
  52 : ...
  24 : ...
  36 : ...
} 

在这个bins中,键是高度,而每个箱子里有一组物品的列表。

我试着想了些办法,但一直没有成功。

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 个回答

1

字典本身是没有顺序的,也就是说你不能对它们进行排序。如果你想要一个可以排序的字典,可以在网上搜索一下“SortedDict”的实现,它就像字典,但可以让你进行排序。

2

Sorted() 返回一个列表,因为字典是不能被排序的。字典的结构本身不保存顺序。

另一种解决办法是使用 OrderedDict。这是一个可以记住你插入项目顺序的字典。所以你不能真正地对 OrderedDict 进行“排序”,但你可以把 sorted() 函数的结果存储到一个新的 OrderedDict 中。

想了解更多细节,可以查看这个问题:

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

撰写回答