按字典项的总和对字典排序
我有一个数据结构需要排序。每个“箱子”代表一组高度相同的物品,我需要计算这些箱子的面积总和和重量总和,然后根据它们的比例来排序这些箱子。
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 中。
想了解更多细节,可以查看这个问题: