4

だから私は小さな問題を抱えています。リスト内のものの値に応じて、各キーのリストを持つキーを持つ辞書をソートすることについて、少し前にここで助けを得ました。値の量が最も少ないリストを持つキーが左側にあり、値の量が多いリストを持つキーが右側にあります。それはうまくいきました。これで、辞書のキーをアルファベット順に並べ替える方法がわかりましたが、上記と組み合わせて機能させることはできません..

最初にキーリストに含まれる値の数に従って、以下の辞書をソートしようとしています...そして、キーリストに前のキーリストと同じ量の値が含まれている場合はアルファベット順に並べ替えます。

だから私はこれを持っている前に:

Dict = {"anna":[1,2,3],"billy":[1,2],"cilla":[1,2,3,4],"cecillia":[1,2,3,4],"dan":[1]}

そして、すべてがうまくいけば、私はしたい...

Dict = {"dan":[1],"billy":[1,2],"anna":[1,2,3],"cecillia":[1,2,3,4],"cilla":[1,2,3,4]}

上記でわかるように、リストには両方とも 4 つの値があるため、cecillia前に来ます...そして、彼のリストにある値の量が最も少ないため、最初に来ます。これが理にかなっていることを願っています。以下の結果を得るために私が今持っているものは次のとおりです。cilladan

ascending = sorted(Dict, key =lambda x: len(Dict[x]))

これは私に例を与えます:

{"dan":[1],"billy":[1,2],"anna":[1,2,3],"cilla":[1,2,3,4],"cecillia":[1,2,3,4]}

だからそれは機能しますが、リスト内の値に対してのみ..今私が行くとき

ascending.sort()

辞書をアルファベット順に並べ替えますが、最小から最大への値の順序はなくなります。2つのことを組み合わせる方法を知っている人はいますか?大変ありがたく存じます。

4

1 に答える 1

4

辞書をソートしたままにすることはできないため、タプルのリストに変換する必要があります。

D = [ (x, Dict[x]) for x in Dict]
ascending = sorted(D, key = lambda x: x[1])
ascending.sort()

http://wiki.python.org/moin/HowTo/Sortingを参照してください。ところで、あなたが依存している機能は、実際には、並べ替えアルゴリズムが安定しているためです(Pythonでプログラミングしていたときはそうではなかったようです)。

于 2012-04-04T03:24:49.837 に答える