2012-03-24 3 views
6

値の降順でソートされたdictのソートされた表現を取得する必要があります(dictの最大値が最初に表示されます)。ソートされた組み込み関数を使用したpython dictの値のソート

サンプル:私は

[u'jaime', u'den', u'rob', u'jon'] 
01を取得し、リストを印刷するとき

mydict={u'jon':30,u'den':26,u'rob':42,u'jaime':31} 

私は

rob=42 
jaime=31 
jon=30 
den=28 

のようにそれらを表示する必要があるが、私はこの

from operator import itemgetter 
sortedvalues=sorted(mydict,key=itemgetter(1)) 

を試してみました

このリストは順序付けされていません!並べ替えられた組み込み関数の使い方について何か不足していますか?またはitemgetterを間違って使用していますか?

答えて

11

あなたはキーが別の非インデックス可能なタイプであったならば持っている(整数を言う)となるようなエラーが発生することはありませんでしたので、これは興味深い問題があり、これは物事の微妙なシリーズによるものです。 (mydict、...)ソート

  1. 辞書を反復mydict.__iter__()
  2. を呼び出すiter(mydict)と同等のものを使用して、辞書が有効iter(mydict)に、そのキーをもたらす反復しようとと同じです。
  3. あなたのキーは文字列でした。文字列はインデックス可能なので、itemgetter(1)は文字列の値に作用し、文字列の2番目の文字を取得します。

文字列に1文字の長さがあった場合は、IndexErrorで失敗してしまったコードもあります。 (または、IndexErrorを取得すると、問題をより早く知ることができたので、どのように見えるかによって異なります。)

何あなたが値だけをしたい場合はやりたいことはある:

sorted(mydict.values(), reverse=True) 

そして、あなたはペアで、同様のキーをしたい場合、あなたは(辞書上

sorted(mydict.iteritems(), key=itemgetter(1), reverse=True) 
+1

私はこの応答を読ん直前に気づいを! mictict.iteritems()に変更しました。 –

+0

dict.items()に対してdict.iteritems()を使用する必要があるのはいつですか? –

+1

'' sorted(mydict、key = mydict.get、reverse = True) ' –

5

名前の2番目の文字でソートされています。 dictを繰り返し実行するとそのキーが生成されます。

sorteditems = sorted(mydict.iteritems(), key=itemgetter(1)) 
3

反復処理をしたいですそれはsortedの機能です)は、そのキーだけを提供します:

>>> sorted(mydict) 
[u'den', u'jaime', u'jon', u'rob'] 

キーと値の両方をソートする - これを行うには、あなたは(大dictsと、より効率的である、またはmydict.iteritems()mydict.items()を使用します。

>>> sorted(mydict.items()) 
[(u'den', 26), (u'jaime', 31), (u'jon', 30), (u'rob', 42)] 

期待通り次に、あなたのコードは動作します:

>>> from operator import itemgetter 
>>> sorted(mydict.items(), key = itemgetter(1)) 
[(u'den', 26), (u'jon', 30), (u'jaime', 31), (u'rob', 42)] 

複数のキーが同じ値でなければならない場合にあなたはまた、第2ソート値として辞書のキーでソートすることがあります。

>>> mydict={u'a': 1, 'z': 1, 'd': 1} 
>>> sorted(mydict.items(), key = itemgetter(1)) 
[(u'a', 1), ('z', 1), ('d', 1)] 
>>> sorted(mydict.items(), key = itemgetter(1, 0)) 
[(u'a', 1), ('d', 1), ('z', 1)]