0

並べ替える必要のあるデータ構造は次のとおりです。同じ高さのアイテムのグループである各ビンについて、面積の合計と重量の合計を取得し、比率でビンを並べ替える必要があります。

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)

問題は、これがリストを返すことです。とにかく辞書オブジェクトを保持することはありますか?イテレータとしてキャストする必要がありますか?

4

2 に答える 2

2

Sorted()辞書はソートできないため、リストを返します。構造は注文を保存しません。

別の解決策は、を使用することOrderedDictです。これは、アイテムを挿入した順序を記憶している辞書です。したがって、実際には「Sort」とOrderedDictを実行することはできませんが、結果またはsorted()関数を新しいOrderedDictに格納することはできます。

詳細については、この質問を参照してください。

OrderedDictのOrderedDictを並べ替える方法-Python

于 2013-02-03T20:18:50.697 に答える
1

辞書は本質的に順序付けられていません。並べ替えることはできません。辞書のようなものですが、並べ替えも可能な「SortedDict」の実装をグーグルで検索できます。

于 2013-02-03T20:08:52.200 に答える