27

私は基本的に辞書を反復処理し、キー/値を最大値から最小値まで出力しようとしています。私はこのサイトを検索しており、多くの人がラムダを使用していますが、その仕組みがよくわからないので、今のところ避けようとしています.

dictIterator = iter(sorted(bigramDict.iteritems()))
for ngram, value in dictIterator:
    print("There are " + str(value) + " " + ngram)

上記のコードを見て、キーと値のペアを最大から最小の順に返すイテレータを作成すると想定しましたが、そうではありません。

誰が問題が何であるかを見ることができますか? またはこれを行う別の方法は?

4

5 に答える 5

26

最初の要素が 2 番目の要素よりも重要であると見なすことで、並べ替えがタプルで機能するという事実を利用できます。

d = { "a":4, "c":3, "b":12 }
d_view = [ (v,k) for k,v in d.iteritems() ]
d_view.sort(reverse=True) # natively sort tuples by first element
for v,k in d_view:
    print "%s: %d" % (k,v)

出力:

b: 12
a: 4
c: 3

EDIT:ワンライナー、ジェネレータ式:

sorted( ((v,k) for k,v in d.iteritems()), reverse=True)

出力:

[(12, 'b'), (4, 'a'), (3, 'c')]
于 2012-06-27T14:56:13.930 に答える
24

keyのパラメーターを使用しsortedて、2 番目の項目で並べ替えることができます。

>>> d = { "a":4, "c":3, "b":12 }
>>> from operator import itemgetter
>>> for k, v in sorted(d.items(), key=itemgetter(1)):
    print k, v


c 3
a 4
b 12
>>> 

編集:ワンライナー、逆の順序で:

>>> d = {"a": 4, "c": 3, "b": 12}
>>> [(k, v) for k, v in sorted(d.items(), key=lambda x: x[1], reverse=True)]
[('b', 12), ('a', 4), ('c', 3)]
>>> 
于 2012-06-27T14:59:12.023 に答える
3
>>> d = { "a":4, "c":3, "b":12 }
>>> from operator import itemgetter
>>> lst = sorted(d.iteritems(), key=itemgetter(1))
>>> for t in lst: print '%s : %d' % (t[0], t[1])
... 
c : 3
a : 4
b : 12
于 2012-06-27T14:58:25.323 に答える
0
d = { "a":4, "c":3, "b":12 }
for v in sorted( d.values() ):
    for key in d:
        if d[ key ] == v:
            print key, v
            break
于 2012-06-27T14:46:50.380 に答える