2

これを使用して、その値のdictをソートできることを私は知っています:

>>> mydict = {'silver': 300, 'gold': 500, 'bronze': 100, 'platinum': 1000}
>>> items = mydict.items()
>>> print sorted([value for key, value in items])
[100, 300, 500, 1000]

しかし、dictの値を並べ替えてキーを保持したい場合はどうすればよいでしょうか? 出力は次のようになります。

{'platinum': 1000, 'gold': 500, 'silver': 300, 'bronze': 100}

これを達成する方法はありますか?

4

5 に答える 5

6

それらは本質的に順不同であるため、結果として辞書を取得することはできません。ただし、(キー、値)ペアのリストを取得できますが、keyパラメーターを使用すると、かなり簡単に取得できます。例えば:

sorted(mydict, key=mydict.get)

降順の場合は、結果のリストを逆にするかreverse=True、別の引数として に渡しますsorted

その結果を使用してOrderedDictを構築できることに注意してください。

于 2012-09-25T14:12:02.823 に答える
2

辞書は順序のないデータ構造であるため、並べ替えることはできません。ただし、これをタプルのリストに変換して、タプルの2番目の項目で並べ替えることができます。

>>> mydict = {'silver': 300, 'gold': 500, 'bronze': 100, 'platinum': 1000}
>>> sorted(mydict.items(), key = lambda (metal, price): -price)
[('platinum', 1000), ('gold', 500), ('silver', 300), ('bronze', 100)]
于 2012-09-25T14:14:06.137 に答える
2
>>> mydict = {'silver': 300, 'gold': 500, 'bronze': 100, 'platinum': 1000}
>>> from operator import itemgetter
>>> from collections import OrderedDict
>>> od = OrderedDict(sorted(mydict.items(),  key=itemgetter(1), reverse=True))
>>> od
OrderedDict([('platinum', 1000), ('gold', 500), ('silver', 300), ('bronze', 100)])
于 2012-09-25T14:22:11.747 に答える
1

これを試しましたか、

    mydict = {'silver': 300, 'gold': 500, 'bronze': 100, 'platinum': 1000}
    from operator import itemgetter
    sorted(mydict.items(), key=itemgetter(1),  reverse=True)
    o/p = > [('platinum', 1000), ('gold', 500), ('silver', 300), ('bronze', 100)]
于 2012-09-25T14:18:52.483 に答える
1

やりたいことがprintだけの場合でも、キーはまだあります。それらも印刷するだけです:

from operator import itemgetter 

print '{' + ', '.join([': '.join(map(repr, item)) for item in sorted(items, key=itemgetter(1), reverse=True)]) + '}'

出力:

>>> print '{' + ', '.join([': '.join(map(repr, item)) for item in sorted(mydict.items(), key=itemgetter(1), reverse=True)]) + '}'
{'platinum': 1000, 'gold': 500, 'silver': 300, 'bronze': 100}
于 2012-09-25T14:11:33.307 に答える