Pythonディクショナリ(辞書)

 今日も見に来て下さって、ありがとうございます。石川さんです。

 今日は、Pythonのディクショナリを少し紹介します。ディクショナリはキーと値のペアを格納できるコレクションです。はじめてこのディクショナリを知った時は、便利すぎて衝撃でした。

作成方法と使い方

In [1]: d = { "A": "Apple", "B": "Boy", "C": "Color" }

In [2]: d
Out[2]: {'A': 'Apple', 'B': 'Boy', 'C': 'Color'}

 ディクショナリを作るには、上記のようにキー:値のペアをカンマで区切って並べ、波括弧「{}」で囲みます。それぞれの要素を取り出すには、キーを以下のように指定していきます。

In [3]: d["A"]
Out[3]: 'Apple'

In [4]: d["B"]
Out[4]: 'Boy'

In [5]: d["C"]
Out[5]: 'Color'

 キーだけを取り出す、値だけを取り出す、キーと値のペアを取り出すには以下のように記述します。

In [6]: d.keys()
Out[6]: dict_keys(['A', 'B', 'C'])

In [7]: d.values()
Out[7]: dict_values(['Apple', 'Boy', 'Color'])

In [8]: d.items()
Out[8]: dict_items([('A', 'Apple'), ('B', 'Boy'), ('C', 'Color')])

 ちなみに、存在しないキーを指定すると、エラーになります。

In [9]: d['Z']
Traceback (most recent call last):

  File "<ipython-input-168-b7ca268d4341>", line 1, in <module>
    d['Z']

KeyError: 'Z'

 このキーが含まれているかどうかは、inを使って確認することができます。

In [10]: 'A' in d
Out[10]: True

In [11]: 'Z' in d
Out[11]: False

 値を変更するには、以下のようにします。

In [12]: d['A'] = 'Air'

In [13]: d
Out[13]: {'A': 'Air', 'B': 'Boy', 'C': 'Color'}

 存在しないキーを使用すると、要素が追加されます。

In [14]: d['D'] = 'Dictionary'

In [15]: d
Out[15]: {'A': 'Air', 'B': 'Boy', 'C': 'Color', 'D': 'Dictionary'}

 要素を削除するには以下のようにします。

In [16]: del d['C']

In [17]: d
Out[17]: {'A': 'Air', 'B': 'Boy', 'D': 'Dictionary'}

 すべての値を削除するには、以下のようにします。

In [18]: d.clear()

In [19]: d
Out[19]: {}

 ここで、「{}」が出てまいりましたが。空のディクショナリを作成するときにも「{}」が使えます。なので、すべての値を削除するもう一つのやり方として、空辞書「{}」をディクショナリ名に代入することで実現できます。

 ほかのディクショナリの作成方法としては、dict()が使えます。

In [20]: dict()
Out[20]: {}

In [21]: dict(['ab','cd','ef')
Out[21]: {'a': 'b', 'c': 'd', 'e': 'f'}

In [22]: dict((['a','b'],['c','d'],['e','f']))
Out[22]: {'a': 'b', 'c': 'd', 'e': 'f'}

 この他にも、タプルやリストの組み合わせが利用可能です。

 値を取り出す他のやり方としては、get()があります。

In [23]: d.get('A')

In [24]: print(d.get('A'))
None

In [25]: d.get('A','a')
Out[25]: 'a'

 最初の例は、キー「’A’」の値を取り出していますが、存在しないため、Noneを戻しています。インタープリターでは何も表示されないため、print()を使って確認しています。その次の例は、値がなかった時のオプションとして「’a’」を指定しています。

まとめ

 ディクショナリは、とても便利ですね。連続で取り出すときの順番は保証されませんので、そこだけ注意が必要でしょうか。(順番を保証したい場合はOrderedDict()が利用できます。)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.