Help us understand the problem. What is going on with this article?

Pythonのdict型をkey, valueの両方でソートする

More than 3 years have passed since last update.

Python3のdict型を使っていて、keyとvalueの両方でソートする必要がありました。

まとめ

まず、コメントでおしえていただきました望ましい書き方を提示します。これを含むコメントに記載いただいた方法がベストかと思います。

sorted_last_record = sorted(last_record.items(), key=lambda x: (x[1], x[0]))

※詳しくはコメントを御参照ください。

私の書いたのは、

from collections import OrderedDict
sorted_last_record = OrderedDict(sorted(last_record.items(), key=lambda x: x[0]))
sorted_last_record = sorted(sorted_last_record.items(), key=lambda x: x[1])

でした。あまり意味がなさそうですが、たとえば、keyは昇順、valueは降順であるときとか、ソートする条件がkeyとvalueで違うときには、それなりに意味があったりしないですかね?

内容

最初、

dictをkeyでソートして、その後、valueでソートする、というコードを書きました。

sorted_last_record = sorted(last_record.items(), key=lambda x: x[0])
sorted_last_record = sorted(dict(sorted_last_record).items(), key=lambda x: x[1])

しかし、これでは2行目で、dictに変換したところで、順番が維持されない問題にあたり、時に正解が得られ、時に不正解が得られる、という状況になりました。

そこで、OrderdDictを利用して以下のように記載し、無事解決しました。

from collections import OrderedDict
sorted_last_record = OrderedDict(sorted(last_record.items(), key=lambda x: x[0]))
sorted_last_record = sorted(sorted_last_record.items(), key=lambda x: x[1])

もっと賢い書き方があると思うので、おしえてもらえるとありがたいです。
よろしくお願いいたします。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした