Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@clock

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])

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

1
Help us understand the problem. What is going on with this article?
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
clock
Pythonとデータ分析、統計の勉強中です。仕事ではあまり使う機会がないですが、少しだけPythonでExcelの処理を自動化したりしています。最近は英語勉強をメインにしていて、Pythonやデータ分析・統計はサボり気味です。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?