2012-04-04 13 views
4

だから私は小さな問題を抱えています。私はリストの中のものの価値に応じて各キーのリストを持つキーで辞書をソートすることについて、ずっと前から助けてくれました。左右の値が最も少ないリストを持つキーは、最も多くの値を持つリストを持つキーです。それは素晴らしい仕事でした。さて、私はアルファベット順に辞書のキーをソートする方法を知っているが、私はそれが上記と組み合わせて動作するように取得カント..ソートリストに係る辞書は、Pythonでのキーのアルファベット順に、次にサイズと?

私は、キーのリストが含まれているどのように多くの値が最初によると、以下の辞書のソートしようとしている...とキーリストに以前のキーリストと同じ量の値が含まれている場合はアルファベット順に表示されます。

私はこれだろうする前に:

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つの値を持っているのでcecilliacillaの前に来て...と、彼は彼のリストの値の最小量を持っているのでdanは、最初に入っています。私はこれが理にかなってほしい。私は以下の結果を得るために、今持っていることは次のとおりです。

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

あなたはタプルのリストに変換する必要がありますので、ソートされた辞書を維持することはできません。

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でプログラミングされたケースはありませんでした)stableあるのでところであなたが依存している機能は、実際にあります。

関連する問題