40のおっさんのPython学習記録

20年以上前、学部の必修のC言語が全く理解できずに同級生に放り投げ、その後コーディングから遠ざかったガチ文系のおっさんが、ふと思い立ってPythonに挑戦しています。

新たな気づき(Chapter 9-2)

  • key in dict_aで要素が辞書にあるかどうかわかるし、dict_a.get(key)だと要素があれば値が返り、何もなければ何も返らず、エラーにはならない。
  • 東急線の路線名のリストを用意します。
>>> tokyu_lines=["toyoko","meguro","dento","oimachi","ikegami","tamagawa","kodomo"]

各路線の路線長のデータを用意します。

>>> tokyu_line_length=[24.2,11.9,31.5,12.4,10.9,5.6,3.4]

それをzipでつないで辞書にします。

>>> tokyu=dict(zip(tokyu_lines,tokyu_line_length))
>>> print(tokyu)
{'toyoko': 24.2, 'meguro': 11.9, 'dento': 31.5, 'oimachi': 12.4, 'ikegami': 10.9, 'tamagawa': 5.6, 'kodomo': 3.4}

上に作った辞書の値だけをvalue()メソッドで取り出し、最長路線の路線長を出します。他にもminも適用可能。

>>> tokyu.values()
dict_values([24.2, 11.9, 31.5, 12.4, 10.9, 5.6, 3.4])
>>> max(tokyu.values())
31.5

路線名だけをkeys()メソッドで抜き出し、世田谷線を入れ忘れていたのに気づいて加えます。

>>> tokyu.keys()
dict_keys(['toyoko', 'meguro', 'dento', 'oimachi', 'ikegami', 'tamagawa', 'kodomo'])
>>> tokyu["setagaya"]=5.0
>>> print(tokyu)
{'toyoko': 24.2, 'meguro': 11.9, 'dento': 31.5, 'oimachi': 12.4, 'ikegami': 10.9, 'tamagawa': 5.6, 'kodomo': 3.4, 'setagaya': 5.0}

路線名を全て小文字にしてしまっていたので内包表記を利用して大文字にします。

>>> tokyu_keys=[key.capitalize() for key in tokyu]
>>> tokyu_keys
['Toyoko', 'Meguro', 'Dento', 'Oimachi', 'Ikegami', 'Tamagawa', 'Kodomo', 'Setagaya']

items()メソッドを利用するとキーと値で構成されるタプルで構成されるdict_items型データに変換でき、これをlist()関数でリストに変換するとその後の利用がし易い。

>>> tokyu.items()
dict_items([('toyoko', 24.2), ('meguro', 11.9), ('dento', 31.5), ('oimachi', 12.4), ('ikegami', 10.9), ('tamagawa', 5.6), ('kodomo', 3.4), ('setagaya', 5.0)])
>>> list(tokyu.items())
[('toyoko', 24.2), ('meguro', 11.9), ('dento', 31.5), ('oimachi', 12.4), ('ikegami', 10.9), ('tamagawa', 5.6), ('kodomo', 3.4), ('setagaya', 5.0)]

dict_items型でfor-inを利用するとキーと値を取り出して利用しやすい。

>> for key,value in tokyu.items():
...     print(f"{key} line's length is {value}km")
... 
toyoko line's length is 24.2km
meguro line's length is 11.9km
dento line's length is 31.5km
oimachi line's length is 12.4km
ikegami line's length is 10.9km
tamagawa line's length is 5.6km
kodomo line's length is 3.4km
setagaya line's length is 5.0km

やっぱり鉄道線に限ったリストにしたいのでpop()メソッドを利用して世田谷線は削除します。

>>> tokyu.pop("setagaya")
5.0
>>> tokyu
{'toyoko': 24.2, 'meguro': 11.9, 'dento': 31.5, 'oimachi': 12.4, 'ikegami': 10.9, 'tamagawa': 5.6, 'kodomo': 3.4}

popitem()はランダムに要素を取り出し、元の辞書からは削除します。何に使うの?