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

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

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

  • 空の辞書の作り方はdict_a={}かdict_a=dict()でおけ。
  • 辞書のキーは変更不可でなければならないので、リストをキーにすることはできないけど、タプルをキーにすることはできる。
  • dict(zip(key_list,value_list))でリストを辞書に変換できる。dict(list_a),dict(tuple_a)でもリストとタプルの要素数が適切に管理されていれば辞書に変換できる。以下は全て同じ結果を返す。
family=["埋木","梅本","呻き","梅なんとか"]
first=["幽閉","横柄","遊兵","幽霊"]
fn_dict1=dict(zip(family,first))
fn_dict2=dict(list(zip(family,first)))
fn_dict3=dict(tuple(zip(family,first)))
print(fn_dict1)
print(fn_dict2)
print(fn_dict3)
# {'埋木': '幽閉', '梅本': '横柄', '呻き': '遊兵', '梅なんとか': '幽霊'}
# {'埋木': '幽閉', '梅本': '横柄', '呻き': '遊兵', '梅なんとか': '幽霊'}
# {'埋木': '幽閉', '梅本': '横柄', '呻き': '遊兵', '梅なんとか': '幽霊'}
  • キーワード引数を利用することで引数名を指定して値を渡すことができるが、dict()にも利用できる。簡単に言うと、引数名=値をつないでも辞書になる。
dict_a = dict(toyoko=24.2,dento=31.5,meguro=11.9)
# {'toyoko': 24.2, 'dento': 31.5, 'meguro': 11.9}
  • dict.fromkeys(キー,初期値)で初期値を指定した辞書を作成できる。初期値を入力しない場合の初期値はNoneになる。キーを文字列にすると1文字ずつばらばらになる。
>>> dict.fromkeys("あほんだら",0)
{'あ': 0, 'ほ': 0, 'ん': 0, 'だ': 0, 'ら': 0}

複数の文字列をキーに指定したい場合は以下のように[]で囲ったリストにする。

>>> dict.fromkeys(["あほんだら","誰がポットじゃ","出えへん"],1)
{'あほんだら': 1, '誰がポットじゃ': 1, '出えへん': 1}

以下のように別に作成したリストを呼び出すことも当然可能。

>>> obitani=["あほんだら","誰がポットじゃ","出えへん"]
>>> dict.fromkeys(obitani,1)
{'あほんだら': 1, '誰がポットじゃ': 1, '出えへん': 1}
  • 辞書への要素の追加と更新はdict_a[key]=valueでやる。keyが既定義の場合は値が更新され、新規定義の場合は要素が追加される。
>>> tokyu_lines=dict(toyoko=24.2,dento=31.5,meguro=11.9)
>>> tokyu_lines["tamagawa"]=5.6
>>> tokyu_lines
{'toyoko': 24.2, 'dento': 31.5, 'meguro': 11.9, 'tamagawa': 5.6}
  • ただし、setdefault()メソッドを使うと、キーが既定義の場合は値が更新されず、新規定義の場合は要素が追加される。
>>> tokyu_lines.setdefault("dento",54.5)
31.5
>>> tokyu_lines.setdefault("ikegami",10.9)
10.9
>>> tokyu_lines
{'toyoko': 24.2, 'dento': 31.5, 'meguro': 11.9, 'tamagawa': 5.6, 'ikegami': 10.9}
  • update()メソッドを使うと、別の辞書を使うことでkeyが共通の場合は値が更新され、新規定義の場合は要素が追加される。
>>> obitani_update={"風邪ひいとんねん":1,"誰がポットじゃ":0}
>>> obitani.update(obitani_update)
>>> obitani
{'あほんだら': 1, '誰がポットじゃ': 0, '出えへん': 1, '風邪ひいとんねん': 1}
  • 要素の削除はdel dict_a[key]
  • 辞書のまるごと削除はclear()メソッド
  • 内包表記は辞書でも使える。
>>> participants = ["一太郎","花子","五郎","三四郎"]
>>> dice_results = {key: randint(1,6) for key in participants}
>>> dice_results
{'一太郎': 3, '花子': 5, '五郎': 6, '三四郎': 6}
  • =で辞書を辞書に代入すると、元の辞書に変更を加えると代入先の辞書もアップデートされる。複製を作りたいときは=で代入するのではなくcopy()メソッドを利用すべき。
  • dict_b=dict.fromkeys(dict_a,0)とすることで、dict_aのキーと構造を維持したまま値をリセットできる。