Pythonのdict入門:キー・値・操作方法をわかりやすく整理

python logo notext.svg

Pythonで扱うデータ構造の中でも、特によく使われるのがリストと辞書です。

リストが「順番のあるデータ」を扱うのに対して、辞書(dict)は
「キーと値の組み合わせ」でデータを管理します。

少し慣れてくると、リストと辞書を組み合わせるだけで、ほとんどの処理が書けるようになります。

この記事では、辞書の基本的な操作から、少し応用的な使い方まで順番に見ていきます。

Pythonの導入についてはこちら。

Python入門:最初のプログラムを作って実行する方法 – Lean Data Office

Python環境構築のやり方|初心者向け完全ガイド – Lean Data Office

辞書についての関連記事はこちら。

Pythonの辞書(dict)応用:カウント処理と集計を解説 – Lean Data Office

辞書の基本

まずはシンプルな辞書を用意します。

animals = {
'a': 'aardvark',
'b': 'bear',
'c': 'cat',
}
image

辞書はこのように「キー: 値」の形式で定義します。

ここで末尾にカンマがついていますが、これは「トレーリングカンマ」と呼ばれる書き方です。
必須ではありませんが、後から要素を追加しやすくなるため、よく使われます。

値の取り出し

辞書から値を取り出すときは、キーを使います。

print(animals['a'])
image

リストとは違い、「位置」ではなく「キー」でアクセスするのが特徴です。

要素の追加と更新

新しい要素を追加する場合も、同じ書き方を使います。

animals['d'] = 'dog'
print(animals)
image

既存のキーを指定すると、値は上書きされます。

animals['a'] = 'antelope'
print(animals)
image

このように、追加と更新は同じ書き方で行われます。

keysとvaluesを取得する

辞書には、キーと値をそれぞれ取得するためのメソッドがあります。

print(animals.keys())
print(animals.values())
image

これらはリストのように見えますが、実際には dict_keysdict_values という専用のオブジェクトです。

そのままでもループで使うことはできますが、リストとして扱いたい場合は変換します。

keys_list = list(animals.keys())
print(keys_list)
image

辞書でよく起きるのが、「存在しないキーへのアクセス」です。

print(animals['e'])
image

これはエラーになります。

こういったケースでは、getメソッドを使うと安全に取得できます。

print(animals.get('e'))
image

存在しない場合は None が返ります。

さらに、デフォルト値を指定することもできます。

print(animals.get('e', 'elephant'))
image

この場合は “elephant” が返ります。

長さを取得する:len

辞書の要素数は len() で取得できます。

print(len(animals))
image

キーの数がそのまま長さになります。

リストを値に持つ辞書

実際のコードでは、辞書の値としてリストを使うこともよくあります。

animals = {
'a': ['antelope'],
'b': ['bear'],
}
image

このようにすると、1つのキーに対して複数の値を持たせることができます。

例えば、新しく「bison」を追加する場合を考えます。

animals['b'].append('bison')
image

これは問題なく動きます。

しかし、「c」のようにまだキーが存在しない場合は注意が必要です。

animals['c'].append('cat')
image

これはエラーになります。

この場合、先にキーが存在するか確認する必要があります。

if 'c' not in animals:
    animals['c'] = []
    animals['c'].append('cat')
image

この書き方であれば、キーの有無に関係なく安全に追加できます。

ただし、少し冗長に感じるかもしれません。

このようなケースを簡潔に書くために用意されているのが defaultdict です。

from collections import defaultdict
animals = defaultdict(list)
image

ここで指定している list は、「値が存在しないときに新しく作るデータの型」です。

animals['e'].append('elephant')
print(animals)
image

キーが存在しない場合でも、自動的に空のリストが作られ、そのまま追加されます。

さらに値を追加すると、

animals['e'].append('emu')
print(animals)
image

同じキーに対してリストがそのまま使われます。

まだ何も入れていないキーにアクセスすると、

print(animals['f'])

空のリストが返ります。

辞書は、Pythonで最もよく使われるデータ構造のひとつです。

リストと組み合わせることで、

  • データの分類
  • グループ化
  • 集計

といった処理をシンプルに書くことができます。

基本の操作自体はそれほど多くありませんが、
少し慣れてくると自然に使えるようになる部分でもあります。

特に getdefaultdict は実務でもよく使われるので、
このあたりは早い段階で触れておくと後が楽になります。

筋トレとオートメーションが趣味。 モバイルアプリ個人開発者。 データ処理・可視化とレポートにハマり備忘録と情報共有のためにブログ開設し運営している。