「アウトプットと言う名の備忘録@Texas」

日本じゃない何処かの脳筋パイソニスタによる何かしらの走り書き

【Python初心者必見】Pythonの辞書型の超基礎。追加!検索!削除!を一気に感覚とイメージで掴む〜今後ググる必要が無くなりますように〜

このタイトルは自分への戒めです。

このブログを始める最大のキッカケとも言える

Python

今や、AI やら、機械学習やら、ディープラーニングやらで近年巷でやたら熱い言語。
シンプルかつパワフルな言語でプログラム初心者にも取っつきやすい。

と言うことで、ペチペチPythonスクリプトを仕事で書いたり、趣味で書いたりしているわけですが、

同じことを何度も調べているんですね。

学びなさいよ。いい加減!

と言うことで基本に立ち返りながら
よく調べることをここに噛み砕きまくって記します。
(詳しい方々はスルーで!!)

今日は 辞書!!

参ります。

取り敢えずいきなり実例!何事イメージが大切

基本の辞書型

my_pet = {'dog':'pochi', "cat":'mike', "bird":'pi-chan'}
name = my_pet['dog']
print (name)

#↓↓↓↓結果↓↓↓↓↓
#pochi

初めての方はここで何が起きてるか想像してみよう。
まず最初の行
このふにゃってるこれは!?
'{ }' ←?!

その中で、ドッグやらポチやらが ’:’(コロン) で区切られている

さらにそれらのペアを区切る点 ’ , ’

そして

name = mydict['dog']
print (name)

今度は'[ ]'を使って
で、その結果が

pochi

ポチ!!

勘のいい方ならここで何が起きているのか既にお気づきだろう。

「きっと一行目のふにゃふにゃ括弧が辞書を構成する為に大事なモノなんだろうなー

おそらく、コロンの前後で対になってるんだろうなー

そしてその辞書の中の複数のペアを区切るのがの役割なんだろうなー

そして二行目とと三行目の関係性から考えて、コロンの手前を'[ ]'に入れることによって後のものを呼び出せるのかなー」…と

辞書の基本イメージはだいたいこんな感じ。

実際に辞書を作ってみる

make_pet = {}
make_pet['dog'] = 'taro'
print (my_pet)
#↓↓↓↓結果↓↓↓↓↓
#{'dog': 'taro'}  できた!
make_pet = {}
make_pet['dog'] = 'taro'
make_pet['pig'] = 'boo'
print (my_pet)
#↓↓↓↓結果↓↓↓↓↓
#{'dog': 'taro', 'pig': 'boo'}  追加された!!

お分りいただけただろうか。
最初にふにゃふにゃ括弧のみをタイプすることによって空の辞書が生成され、二行目でこの辞書の'dog'は 'taro' だよーと記入する。
そうすることで

{'dog': 'taro'}

と言う中身のある辞書に早変わり!
また、
犬だけじゃ無くて豚さんも仲間に入れてあげたいーと言うときは、
以前コロンの後のものを呼び出したときに使った'[]'をまた使って

make_pet['pig'] = 'boo' #adding pig to make_pat

たったこれだけで

{'dog': 'taro', 'pig': 'boo'} 

無事豚さんもペットの一員になりました。


だんだんイメージが掴めてきたのではないだろうか。

作った後は色々いじってみる!!

こちらに用意した辞書は架空のテストの成績

test_score = {'math':80, 'sci':68, 'music':79, 'English':65, 'history':82}
a = test_score.keys()
b = test_score.values()
print (a)
print (b)
#↓↓↓↓結果↓↓↓↓↓
# dict_keys(['math', 'sci', 'music', 'English', 'history'])
# dict_values([80, 68, 79, 65, 82])

何やらValuesやら、 Keysやらを使ってコロンの前と後ろで分別されている。そんなこともできるんですね!

そもそもValueKeyとはなんなのか!?

辞書にまつわるメソッドたち

keysメソッドとvaluesメソッド

先にイメージを膨らませる為にあえてすっ飛ばした大事なこと。

それがValueKey

そもそも辞書(dictionary)型とは、あのふにゃにゃ括弧'{}'の中にValueKeyの組み合わせがあのコロン':'によって区切られた形で含まれているデータのこと。そのペアが複数ある場合あの点','で仕切りを付けていくと言う流れ。

つまり先ほどの例でいう所の

test_score = {'math':80, 'sci':68, 'music':79, 'English':65, 'history':82}
#               |    |
#Key____________|    |
#Value_______________|

これを理解した上で、先ほどのテスト成績の例をもう一度みてみると、

test_score = {'math':80, 'sci':68, 'music':79, 'English':65, 'history':82}
a = test_score.keys()
b = test_score.values()
print (a)
print (b)
#↓↓↓↓結果↓↓↓↓↓
# dict_keys(['math', 'sci', 'music', 'English', 'history'])
# dict_values([80, 68, 79, 65, 82])

この部分に注目

a = test_score.keys() 
b = test_score.values()
#.key() と .values()が大事っぽい!

そしてそれらをprintすると

print (a)
print (b)
#↓↓↓↓結果↓↓↓↓↓
# dict_keys(['math', 'sci', 'music', 'English', 'history'])
# dict_values([80, 68, 79, 65, 82])

こうすることでvalueと keyに何が含まれているか分りますね!
ちなみに.key() と .values()のことを順番にkeysメソッド、valuesメソッドと呼ぶらしい

keysメソッド、valuesメソッドを使って検索!

例えば

あれ?辞書の中に'japanses'入ってたっけ?

そんなときはkeysメソッドを使って python に直接聞くのが一番!

a = test_score.keys()
print ('math' in a) #a のなかに'math'ありますかー?
print ('japanese' in a) #a のなかに'japanese'ありますかー?

#↓↓↓↓結果↓↓↓↓↓
#True 'math' あるよー
#False 'japanese'はないよー

とこのような形でkeysメソッド'in'を使うことで
keysの中に'math' と 'japanese'の有無を

'True'

または

'False'

と素っ気なく教えてくれる。

逆もまた然りでvaluesメソッド'in'value中身

test_score = {'math':80, 'sci':68, 'music':79, 'English':65, 'history':82}


a = test_score.keys()
b = test_score.values()
print (100 in b)
print (80 in b)

#↓↓↓↓結果↓↓↓↓↓
#False #100点はないね。残念!
#True #でも80点はあったよ。よくやったね!

popメソッド、clearメソッド

上記と同じ辞書で英語の成績が低くてこの辞書から抹消したい時に便利なのが

popメソッド

test_score = {'math':80, 'sci':68, 'music':79, 'English':65, 'history':82}

test_score.pop('English')
print(test_score)

#↓↓↓↓結果↓↓↓↓↓
#{'math': 80, 'sci': 68, 'music': 79, 'history': 82}
#No more English!!

そして英語だけじゃ無く、もう金輪際成績の話はしたくないというあなたに

clearメソッド

test_score = {'math':80, 'sci':68, 'music':79, 'English':65, 'history':82}

test_score.clear()
print(test_score)

#↓↓↓↓結果↓↓↓↓↓
#{} 
#全てclear!で空の辞書が返ってきます。

辞書に新たな要素を足すsetdefaultメソッド!(個人的にはあまり使わないけど。。

test_score = {'math':80, 'sci':68, 'music':79, 'English':65, 'history':82}

test_score.setdefault('business',90)
print(test_score)

#↓↓↓↓結果↓↓↓↓↓
#{'math': 80, 'sci': 68, 'music': 79, 'English': 65, 'history': 82, 'business': 90}

とsetdefaultメソッドでbusinessと90が対になるように辞書に追加してみました。

んーなるほど、

test_score.setdefault('business',90)

setdefaultメソッドはkeyとなるものとvalueになるものの二つの引数をとるのか。。

だったら

test_score['business'] = 90
print(test_score)

#↓↓↓↓結果↓↓↓↓↓
#{'math': 80, 'sci': 68, 'music': 79, 'English': 65, 'history': 82, 'business': 90}

と、既出の例で足したやり方の方がタイプ数少ないし個人的に好き。

最後にとりあえず覚えておこうリスト

辞書を作る際に必要なものは

  • ふにゃにゃ括弧'{ }'
  • コロン':'
  • key(コロンの手前)
  • value(コロンの後)
  • 要素が複数ある場合は点','で区切る

よく使うメソッド

  • keyを使ってvalueへアクセス
  • 辞書の中身を検索する時はkeysメソッドvaluesメソッド
  • 辞書の中身を消したい時はpopメソッドclearメソッド
  • 辞書に何か足したい時はsetdefaultメソッドもしくは'[ ]'を用いて。。括弧の中にkey「=」の右にvalue(個人的に後者の方が一般的な気が)

終わりに

基本に立ち返るとか言っといて結局ぼんやりとイメージ重視な内容に落ち着きました。

でもなんと無くこれで辞書の基本とイメージがつかめた人が一人でもいれば。。

ということで今日のところは

以上!





(これで毎回Google先生に聞く日々とはおさらば!ではないかな笑)