set内包表記
このレッスンでできるようになること。set 内包表記を使って、重複のない利用カテゴリ一覧を1行で作れるようになります。
set 内包表記は、波かっこの中にキーと値の組ではなく、値を1つだけ書きます。気温の測定値から、観測した整数の気温を重複なく集めてみます。
Python
readings = [18.2, 18.8, 21.1]
whole_degrees = {int(value) for value in readings}
print(sorted(whole_degrees)) # [18, 21]辞書の .values() は、キーを除いた値を順に取り出せるものを返します。値がリストなら、for を2つ並べて中身まで見られます。左の for が外側、右の for が内側です。
Python
readings_by_room = {"東": [18.2, 18.8], "西": [21.1]}
print(list(readings_by_room.values())) # [[18.2, 18.8], [21.1]]
whole_degrees = {int(value) for readings in readings_by_room.values() for value in readings}まず東のリストを取り出して2件を処理し、次に西のリストの1件を処理します。演習では、この二重ループによる月別データの取り出しを _all_expenses(monthly) に分けて準備済みにします。演習で書くのは、支出のリストからカテゴリを集める set 内包表記と並べ替えです。
ここで大事な注意があります。set には並び順がありません。同じコードを走らせても、表示される順番が前と違うことがあります。画面に出すときや、他の関数に渡して結果を比べるときは、必ず sorted() を通してリストに直してください。sorted はもとが set でも並んだリストを返します。
重複を落とす目的が無いなら、set にする必要はありません。件数を数えたいときは第2章の Counter、順番を保ちたいときはリストのままが向いています。道具の役割で選んでください。
要件
- expenses を対象に set 内包表記でカテゴリを集める
- sorted で集合を文字コード順のリストにする
- 並べ替えたリストを返す
ヒント
編集 ゆめさく編集部