3

キーが単純な文字列で、値がいくつかの属性を持つデータ オブジェクトであるオブジェクトの辞書があります。辞書の値の属性に基づいて辞書を並べ替えたいと思います。これを使用して、辞書の値に基づいて並べ替えました

sorted = dict.values()
sorted.sort(key = operator.attrgetter('total'), reverse=True)

これにより、ソートされた値のリストが生成され(これは予想どおりです)、辞書から元のキーを失います(当然のことです)。キーと値の両方を一緒に並べ替えたいのですが...どうすればこれを達成できますか? どんな助けでも大歓迎ですか?

4

3 に答える 3

11

タプルのリストを取得する代わりに.items()(またはその反復子バージョン) を使用します。iteritems.values()(key, value)

items = sorted(dct.iteritems(), key=lambda x: x[1].total, reverse=True)
于 2012-05-24T18:25:28.067 に答える
1

items-の代わりに使用valuesし、ラムダを使用してソートキー自体をフェクトします。これは、準備ができていないoperator ためです。

sorted = dict.items()
sorted.sort(key = lambda item: item[1].total, reverse=True)
于 2012-05-24T18:26:39.850 に答える
1

.items()ではなくを使用する必要があります。.values()次に例を示します。

def keyFromItem(func):
    return lambda item: func(*item)

sorted(
    dict.items(), 
    key=keyFromItem( lambda k,v: (v['total'], k) )
)

上記は最初に合計に基づいてソートし、合計が等しいアイテムについてはキーでアルファベット順にソートします。アイテムを(key,value)ペアとして返します。これ[x[1] for x in sorted(...)]は、値を取得するために行うことができます。

于 2012-05-24T18:26:43.337 に答える