概要
「Head First Python 第2版」を進めていった中で考えたことの記録です。
Head First Python 第2版 ―頭とからだで覚えるPythonの基本
- 作者:Paul Barry
- 発売日: 2018/03/24
- メディア: 単行本(ソフトカバー)
データ型の一種としてのコレクション
- コレクションは、オブジェクトの集まりを表すデータ型一般を指す
- Pythonにおけるコレクションの例
- その他有名なコレクションの例
- 配列
- テーブル
- ツリー
- グラフ
- コレクションに用意されている操作の一般的な例
- 新しい空のコレクションを作成する
- コレクションの要素の数を取得する
- コレクションの任意の要素を取得する
- コレクションの内容を空にする
- コレクションに新たな要素を追加する
- コレクションの要素を削除する
Pythonの辞書について
- 「一意なキーと、キーに対応する任意の値のペア」を要素とするコレクション
- キーと値のペアは、任意個含むことができる
- キーと値のペアを「行」とも呼ぶ
- タプルやリストとは異なり、順序を持たないデータ構造である
- 各要素の格納順は保証されない
- 出力時に各要素の出力順を決め打ちする場合、組み込み関数
sorted()
を用いる
- 辞書を表すリテラルは中括弧
{}
である- オブジェクトの区切りはカンマ
,
である - キーと値の区切りはコロン
:
である
- オブジェクトの区切りはカンマ
- 辞書に対する反復処理について
- 辞書そのものに反復処理を行った場合、当該辞書内全てのキーをコンテナとして取得する動作になる
keys()
メソッドにより、当該辞書内全てのキーをコンテナとして取得することができるvalues()
メソッドにより、当該辞書内全ての値をコンテナとして取得することができるitems()
メソッドにより、当該辞書内全ての行をコンテナとして取得することができるfor
文に2つの変数を与えることにより、1番目の変数に各行のキーを、2番目の変数に各行の値を取得することができる
- 辞書のキーは初期化しなければならない
- 存在しないキーを参照しようとすると、例外
KeyError
をスローする - 「存在しないキーを参照するとデフォルト値を返す」という
get()
関数も辞書に定義されている
- 存在しないキーを参照しようとすると、例外
- 辞書に対して
in
演算子を使用した場合、「指定されたキーを持つ行が辞書に存在するか否か」を返す- 左辺には「ハッシュ化可能なオブジェクト」、右辺には「辞書」を置く
- 戻り値は
True
またはFalse
である
Pythonの辞書に関するコード例
found = {} print(found) # => {}
↑空の辞書found
を定義し、その内容を標準出力に出力する
found = {} found['a'] = 0 found['e'] = 0 found['i'] = 0 found['o'] = 0 found['u'] = 0 print(found) # => {'a': 0, 'e': 0, 'i': 0, 'o': 0, 'u': 0}
↑以下、上記コードの動作について解説
- 空の辞書
found
を定義し、行5つを初期化する- 各行の初期値は0
- 行の初期化順と辞書における行の並び順が一致しているのは偶然である
- 辞書においては、各要素の格納順は保証されない
print(found) # => {'a': 0, 'e': 0, 'i': 0, 'o': 0, 'u': 0} for kv in found: print(kv) # => a # => e # => i # => o # => u
↑辞書そのものに反復処理を行った場合、当該辞書内全てのキーをコンテナとして取得する動作になる
print(found) # =>{'a': 0, 'e': 2, 'i': 0, 'o': 0, 'u': 0} for k in found: print(k, 'の出現回数は', found[k], '回。') # => a の出現回数は 0 回。 # => e の出現回数は 2 回。 # => i の出現回数は 0 回。 # => o の出現回数は 0 回。 # => u の出現回数は 0 回。
↑以下、上記コードの動作についての解説
- キーと値のセットを得るコードの一例
- 値を
辞書名[キー]
という形で得ている
- 値を
print(found) # =>{'a': 0, 'e': 2, 'i': 0, 'o': 0, 'u': 0} print(sorted(found)) # => ['a', 'e', 'i', 'o', 'u'] print(sorted(found.items())) # => [('a', 0), ('e', 2), ('i', 0), ('o', 0), ('u', 0)]
↑以下、上記コードの動作についての解説
- 辞書を引数として
sorted()
関数を使った場合、戻り値はリストとなる - 辞書の
items()
メソッドの結果を引数としてsorted()
関数を使った場合、戻り値は「タプルから成るリスト」となる- タプルの1番目の要素は、元の辞書のキーの1つ
- タプルの2番目の要素は、元の辞書において当該キーに対応する行の値
for k,v in sorted(found.items()): print(k, 'の出現回数は', v, '回。')
↑以下、上記コードの動作についての解説
- 辞書
found
のitems()
メソッドを呼び出し、反復ごとに各行にアクセスする- 各行のキーは変数
k
に取得する - 各行の値は変数
v
に取得する
- 各行のキーは変数
- 辞書の
items()
メソッドの結果を引数としてsorted()
関数を使った場合、戻り値は「タプルから成るリスト」となる - 取得した
k
およびv
を用いて出力メッセージを作成し、標準出力に出力する