cover_effective_python

【 Effective Python, 2nd Edition 】dictionary comprehension の使い道 投稿一覧へ戻る

Tags: Python , comprehension , dictionary , unpack , Effective

Published 2020年6月11日7:01 by T.Tsuyoshi

リスト内包表記 (list comprehension) は使う場面も多いけれど、辞書内包表記 (dictionary comprehension) は使ったことがない、という方も多いのでは、


実際、使う場面はほぼほぼないかもしれません。


そこで、辞書内包表記を利用することでコード全体がスッキリする場面、をご紹介。


下記のようなデータ構造を利用しているとします。


users = [
(0, 'Nana', 'password'),
(1, 'Saki', '1234'),
(2, 'Yuka', '5678'),
(3, 'Hana', 'abcd')
]



ここで、ユーザー名とパスワードを入力してもらいログインする、といったような処理を考えます。


name_input = input('名前を入力してください: ')
password_input = input('パスワードを入力してください: ')



リスト内をループして該当するユーザーを探し出し、パスワードを照合して...


for user in users:
if name_input == user[1]:
if password_input == user[2]:
print('あってます!')
else:
print('間違ってます')
break
else:
print('ユーザー名がないです')



こんなときに前もってユーザー名を key とするディクショナリを作成しておくと
ループを使用する必要もなく、結果的にコード全体のネストが深くならずにスッキリします。


username_mapping = {user[1]: user for user in users} # これが噂の dictionary comprehension (辞書内包表記) です

try:
_, username, password = username_mapping[name_input] # 作成した辞書から値(=タプル)を取得し、アンパックすることでループが必要なくなります
if password_input == password:
print('あってます!')
else:
print('間違ってます')
except KeyError:
print('ユーザー名がないです')

この投稿をメールでシェアする

0 comments

コメントはまだありません。

コメントを追加する(不適切と思われるコメントは削除する場合があります)