検索ガイド -Search Guide-

単語と単語を空白で区切ることで AND 検索になります。
例: python デコレータ ('python' と 'デコレータ' 両方を含む記事を検索します)
単語の前に '-' を付けることで NOT 検索になります。
例: python -デコレータ ('python' は含むが 'デコレータ' は含まない記事を検索します)
" (ダブルクオート) で語句を囲むことで 完全一致検索になります。
例: "python data" 実装 ('python data' と '実装' 両方を含む記事を検索します。'python data 実装' の検索とは異なります。)
img_for_tre_tron

Tré Thộn を食べたことがありますか?
ベトナム・ビンズオン滞在中の方は是非注文して食べてみて!
絶対に美味しいです!
ホーチミン市内へも配達可能です。お問い合わせください。

Have you ever had "Tré Thộn" before?
If you're living at Bình Dương in Vietnam, you "must" try to order and eat it.
I'm sure you're very surprised how delicious it is!!
If you're in Hồ Chí Minh, you have a chance to get it too. Please call!!
>>
effective_python

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

Published 2020年6月11日7:01 by mootaro23

SUPPORT UKRAINE

- Your indifference to the act of cruelty can thrive rogue nations like Russia -

リスト内包表記 (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('ユーザー名がないです')