0

キーに基づいて辞書をソートし、それらのキーに関連付けられた値を返す必要があります。

ages = {40 : 'mother', 38 : 'father', 17 : 'me'}
['me', 'father', 'mother']  # Should return this

これを行う最速の方法は何ですか (コード全体でソートが何千回も呼び出されるため、パフォーマンスは本当に問題です)。

どうもありがとうございました!

4

3 に答える 3

4

キーは数値であり、デフォルトでは辞書のイテレータがキーを返すため、キーを直接並べ替えることができます。

>>> ages = {40:'mother', 38:'father', 17:'me'}
>>> [ages[k] for k in sorted(ages)]
['me', 'father', 'mother']
于 2012-10-14T11:29:41.913 に答える
3

sorted()と関数を利用するzip():

zip(*sorted(ages.items(), key=lambda item: item[0]))[1]

まず、辞書をソートして、タプル (アイテム) のリストを作成します。

>>> sorted(ages.items())
[(17, 'me'), (38, 'father'), (40, 'mother')]

次に、値のみを取ります。

>>> zip(*sorted(ages.items())[1]
('me', 'father', 'mother')

PS ディクショナリが非常に大きい場合はdict.iteritems()、 Python 2 でイテレータを返す which の使用を検討することをお勧めします。Python 3 では、これがデフォルトの動作であり、 によって提供されdict.items()ます。


代替ソリューション - 使用operator.itemgetter():

>>> import operator
>>> operator.itemgetter(*sorted(ages))(ages)
('me', 'father', 'mother')
于 2012-10-14T11:30:09.557 に答える
2

この種のコレクションの性質上、辞書を並べ替えることができません。Python にはいくつかのオプションがありますがOrderedDict、(挿入されたキーと値のペアの順序を維持するために) を使用するか、単にキーを並べ替えます。例:::

ages = {40 : 'mother', 38 : 'father', 17 : 'me'}
ages_sorted = sorted(ages) 
# or ages.iterkeys() / .keys() (in Py3) which is a bit self-explanatory. 
于 2012-10-14T11:30:13.667 に答える