キーに基づいて辞書をソートし、それらのキーに関連付けられた値を返す必要があります。
ages = {40 : 'mother', 38 : 'father', 17 : 'me'}
['me', 'father', 'mother'] # Should return this
これを行う最速の方法は何ですか (コード全体でソートが何千回も呼び出されるため、パフォーマンスは本当に問題です)。
どうもありがとうございました!
キーに基づいて辞書をソートし、それらのキーに関連付けられた値を返す必要があります。
ages = {40 : 'mother', 38 : 'father', 17 : 'me'}
['me', 'father', 'mother'] # Should return this
これを行う最速の方法は何ですか (コード全体でソートが何千回も呼び出されるため、パフォーマンスは本当に問題です)。
どうもありがとうございました!
キーは数値であり、デフォルトでは辞書のイテレータがキーを返すため、キーを直接並べ替えることができます。
>>> ages = {40:'mother', 38:'father', 17:'me'}
>>> [ages[k] for k in sorted(ages)]
['me', 'father', 'mother']
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')
この種のコレクションの性質上、辞書を並べ替えることができません。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.