どうも!リョクちゃです。相変わらず暑い日が続いていますね。
いかがお過ごしでしょうか。
さて、今日はPythonで扱われる辞書型について使い方などを解説していきます。
これが使えるようになると前回学んだ、リストやタプルを活かして、
様々なことが簡単にできるようになります。
ゲームで例えると、RPG系の自分が操作するキャラクターのパラメータ管理や
敵を倒すともらえる経験値やアイテムの管理なんかも実は行えます。
辞書単体だと、文章中の単語の出現回数を調べることもできちゃいますよ。
さっそく、辞書型について学んでいきましょう。
ちなみに前回はこちら
目次
辞書(ディクショナリ)とは
他の言語では、連想配列やハッシュ表ともいわれています。
イメージとしては、国語辞書をイメージするとわかりやすいです。
下のようなイメージになります。
見出しと内容がセットになったものがPythonでいう辞書になります。
特徴
- 見出しと内容のセットになっている
- 見出しと内容を:(コロン)でつなぎ、それぞれのセットを,(カンマ)で区切り、
波かっこ{}で囲んで表記します。 → {見出し1:内容1, 見出し2:内容2} - リストやタプルと違って順序に特に重要な意味はありません。
- インデックスを使ったアクセスがありません。
代わりに見出しを使ってアクセスします。
使い方
先ほどの辞書を実際にPythonで書いてみましょう。
こうなります。
Pythonでは、それぞれ、
- 見出し → Key
- 内容 → Value
として扱われます。
コードで書いたのを下に示しておきます。
1 2 3 4 5 6 |
# 辞書(ディクショナリ) X = {'鉛筆': '文房具の一種', 'リンゴ': 'リンゴは果物'} print(X) # 出力 # {'鉛筆': '文房具の一種', 'リンゴ': 'リンゴは果物'} |
辞書から内容を取り出す
先ほど作成した辞書から、内容を取り出してみましょう。
取り出し方としては、下図のイメージになります。
図にならって、辞書変数Xに格納されている’鉛筆’の内容を取り出してみましょう。
これをPythonで書くと、
1 2 3 4 5 6 |
# 辞書(ディクショナリ) X = {'鉛筆': '文房具の一種', 'リンゴ': 'リンゴは果物'} print(X['鉛筆']) # 出力 # 文房具の一種 |
X[‘鉛筆’]と書くことで、内容を取り出すことができました。
辞書に格納された見出し、内容をすべて取り出す
辞書の中には、どのぐらい見出しが収められているのか気になることも時にはあります。
そんなときには、下図のようにして取り出すことができます。
実際にコードを下に示します。
1 2 3 4 5 6 |
# 辞書(ディクショナリ) X = {'鉛筆': '文房具の一種', 'リンゴ': 'リンゴは果物'} print(X.keys()) # 出力 # dict_keys(['鉛筆', 'リンゴ']) |
いっぽうで、内容をすべて取り出したい場合は、下図のようにして取り出すことができます。
実際にコードを下に示します。
1 2 3 4 5 6 |
# 辞書(ディクショナリ) X = {'鉛筆': '文房具の一種', 'リンゴ': 'リンゴは果物'} print(X.values()) # 出力 # dict_values(['文房具の一種', 'リンゴは果物']) |
このようにして、辞書に格納された見出しや内容をすべて取り出すことができます。
ここで見出しと内容を一緒にすべて取り出せないのか?と疑問に思った方、鋭いです。
見出しと内容をすべて取り出したいとき、下図のようにして取ることができます。
実際にコードを示します。
1 2 3 4 5 6 |
# 辞書(ディクショナリ) X = {'鉛筆': '文房具の一種', 'リンゴ': 'リンゴは果物'} print(X.items()) # 出力 # dict_items([('鉛筆', '文房具の一種'), ('リンゴ', 'リンゴは果物')]) |
まとめ
項目 | 書き方 | 出力 |
---|---|---|
すべての見出しを取得 | 辞書変数.keys() | dict_keys([]) |
すべての内容を取得 | 辞書変数.values() | dict_values([]) |
すべての見出しと内容を取得 | 辞書変数.items() | dict_items([]) |
指定の内容を取得 | 辞書変数[見出し] | 見出しに結びつく内容 |
リストやタプルと組み合わせて使う
辞書では、タプル型を見出し(キー)として扱うことができます。
下図のようになります。
図の場合は、”8月11日生まれのTomさんは、70歳です。”といった解釈ができます。
このようにタプル型をキーにすることで、情報を一意に定めることもできます。
キーが増えれば増えるほど、情報の精度は高くなりますね。
いっぽうでリストの場合、
実際は……
できないのです。
これをコードで書いてみていきましょう。
1 2 3 4 5 6 7 8 9 10 11 |
# 辞書(ディクショナリ) X = {('Tom', '08-11'): 70} Y = {['Tom', '08-11']: 70} print(X) print(Y) # 出力 # 例外が発生しました: TypeError # unhashable type: 'list' # File "Pythonファイル名", エラー発生行数, in <module> # Y = {['Tom', '08-11']: 70} |
実行してみると、タプル型をキーにした変数Xは問題なく実行されましたが、
リストがをキーにした変数Yは、例外が発生してしまいました。
これは、リスト型がunhashableな型だからダメといわれています。
unhashableな型については、今回は触れませんが、興味がある方は
Python unhashable リスト 辞書で検索していただければ出てくると思います。
練習問題
① 辞書変数{ ‘x’ : 24, ’y’ : 18, ‘z’ : 30 }が与えられます。{ key : value }
それぞれのkeyとvalueを取得し、valueが20以上の場合{keyの中身}:’いいね’と出力し、
超えていない場合は{keyの中身}:’ノー’と出力して下さい。
<望ましい出力>
x : いいね
y : ノー
z : いいね
おわりに
ついに辞書型までざっくりとではありますが学ぶことができました。
Pythonで辞書型はなかなかに強力な型なのでぜひ覚えていただけたらなと思います。
前回までに学んできた、リストやタプルも重要なので忘れずに。
筆者もよく使う、リストやタプル、そして辞書をざっくりと紹介しましたが
もうちょっと細かく解説したのは番外編として次回にでもまとめようかと思います。