ハッシュマップ・辞書 - hashmap, dictionary (Python)

はじめに

今回はpythonにおけるハッシュマップについて解説します。コードの処理時間を改善するために不可欠な概念で、配列の検索時間などを向上させることができます。

ハッシュマップとは

pythonでは、辞書やハッシュテーブルとしても知られるもので、一意的なキー(key)と値(value)のペアでデータが格納されるデータ構造のことです。

ハッシュマップはデータ構造の一般的な概念を指していて、
辞書はハッシュマップという概念を(pythonで)実際に実装したものと考えればよいです。

ハッシュマップの解説

基本構造
person = {
    'name': 'John Doe',
    'age':  30,
    'city': 'New York'
}

print(person['name'])  # Output: John Doe
del person['city']

ハッシュマップは、(key): (value), といった形式で要素を書き連ねます。
キーは配列のインデックスのように扱うことができます。
キーと値のペアを削除する際は del を用いて削除できます。

辞書内包表記 (dictionary comprehension)
squares = {x: x**2 for x in range(1,  6)}
print(squares)  # Output: {1:  1,  2:  4,  3:  9,  4:  16,  5:  25}

辞書内包表記とは、pythonの辞書を簡潔に生成するための記法です。上の例では、1から6の反復処理をキーと値に対して行うことで、5つのデータを持つ辞書を一行で生成しています。

入れ子辞書 (nested dictionaries)
bookshelf = {
    'Book1': {'author': 'Author1', 'year':  2001},
    'Book2': {'author': 'Author2', 'year':  2005},
    'Book3': {'author': 'Author3', 'year':  2010}
}

print(bookshelf['Book1']['author'])  # Output: Author1
bookshelf['Book4'] = {'author': 'Author4', 'year':  2015}

入れ子辞書とは、辞書の値にさらに辞書が入った多段階の辞書のことです。上の例のように、出力したり追加することができます。

ハッシュマップを使う利点

検索速度が速い

ハッシュマップでは、ハッシュ関数を用いてキーと値の位置関係をマッピングしているため、データ数にかかわらずO(1)の定数時間で検索できます。

文字などの出現頻度を数える処理で有用

文字列や単語の出現頻度を数える(Frequency counting)でハッシュマップを使うと、検索速度が速いだけでなく、文字列をkeyに、頻度をvalueに設定してマッピングするだけで実装可能なため、コードがシンプルに書けます。また、ハッシュマップにデータを分散配置できるためメモリ効率が良いです。

多様なデータ型を扱える

keyもvalueも様々な型の値を設定することができます。

まとめ

今回はpythonにおけるハッシュマップ・辞書について解説しました。ハッシュマップが有用なのは、ハッシュ関数によってデータをメモリに分散配置して効率的に処理できる点にあるということがわかります。