この記事では、Pythonのdictionary(ディクショナリ)について解説します。dictionaryは辞書とも呼ばれ、keyとvalueの2つの値を用いて扱われます。
それでは、dictionaryの使い方を見ていきましょう!
辞書とは?

辞書とは、配列の一種で複数の要素を格納することができます。しかし、リストやタプルとは異なり、keyとvalueという2つの値を1組の要素として扱う特殊な配列です。keyをvalueを関連付け、keyからvalueにアクセスすることができます。
keyにはハッシュ可能な値ならなんでも指定することができます。
このような、keyとなる値を任意のオブジェクトに対応付けるデータ型のことをマッピング型と呼びます。
- keyとvalueで1つの要素
- マッピング型である
- 並びを保持しない
- 連想配列や連想記憶と呼ばれたりする
辞書の使い方

辞書は以下のように宣言・初期化します。
宣言
辞書を宣言するには{}を使います。
変数 = {}
dict()を使っても宣言できます
変数 = dict()
初期化
辞書を初期化するには{}内にkeyとvalueを:で区切って1組の要素とします。複数の要素を記述する場合は,(カンマ)で区切って記述します。
変数 = {key1: value1, key2: value2, ..., keyN: valueN}
サンプル
試しに辞書を作成して出力してみます。
d = {'key1': 1, 'key2': 2, 'key3': 3}
print(d)
print(type(d))
実行結果
{'key1': 1, 'key2': 2, 'key3': 3}
<class 'dict'>
要素を取得する

辞書の要素にアクセスするには、以下の方法があります。
keyからvalueを取得する
keyからvalueにアクセスすることができます。以下のように[]を使ってアクセスしたいkeyを指定します。
辞書[key]
getメソッドを使用することでも値を呼び出せます。この呼び出しではkeyに関連付けられたvalueが存在しなくてもエラーになりません。
辞書.get(key)
サンプル
試しにkeyからvalueを取得してみます。
d = {'key1': 1, 'key2': 2, 'key3': 3}
print(d['key1'])
print(d['key2'])
print(d['key3'])
実行結果
1
2
3
keyのみ取得[keysメソッド]
keysメソッドを使ってkeyのみを全て取得できます。
辞書.keys()
サンプル
試しに全てのkeyを取得してみます。
profile = {'name': '碇シンジ', 'age': '14', 'gender': '男'}
keys = profile.keys()
print(keys)
実行結果
dict_keys(['name', 'age', 'gender'])
valueのみ取得[valuesメソッド]
valuesメソッドを使ってvalueのみを全て取得できます。
辞書.values()
サンプル
試しに全てのvalueを取得してみます。
profile = {'name': '碇シンジ', 'age': '14', 'gender': '男'}
values = profile.values()
print(values)
実行結果
dict_values(['碇シンジ', '14', '男'])
keyとvalueを取得[itemsメソッド]
itemsメソッドを使ってkeyとvalueを全て取得できます。
辞書.items()
サンプル
試しに全てのkeyとvalueを取得してみます。
profile = {'name': '碇シンジ', 'age': '14', 'gender': '男'}
items = profile.items()
print(items)
実行結果
dict_items([('name', '碇シンジ'), ('age', '14'), ('gender', '男')])
各要素にアクセスする[for文]
for文とitemsメソッドを組み合わせることで各要素にアクセスできます。
profile = {'name': '碇シンジ', 'age': '14', 'gender': '男'}
for key, val in profile.items():
print(f'key: {key}, value: {val}')
実行結果
key: name, value: 碇シンジ
key: age, value: 14
key: gender, value: 男
要素をバラバラに取得する[アンパック]
以下のように記述することでkeyをアンパックできます。
d = {'one': 1, 'two': 2, 'three': 3}
# アンパック
k1, k2, k3 = d
print(k1, k2, k3)
実行結果
one two three
関数に渡す際は**を変数の前に付けます。
d = {'one': 1, 'two': 2, 'three': 3}
def func(one, two, three):
print(one)
print(two)
print(three)
# この呼び出しは、「func(one=1, two=2, three=3)」と等価
func(**d)
実行結果
1
2
要素の変更・追加

辞書の要素を変更・追加する方法を紹介します。
要素の変更・追加 [代入]
keyを指定してvalueを代入することで要素を変更・追加できます。指定したkeyが存在する場合は、要素の変更となり、存在しない場合は、そのkeyとvalueを追加できます。
辞書[key] = value
サンプル
試しに要素の変更と追加をしてみます。
profile = {'name': '碇シンジ', 'age': '14'}
# 要素の変更
profile['name'] = '綾波レイ'
# 要素の追加
profile['gender'] = '女'
print(profile)
実行結果
{'name': '綾波レイ', 'age': '14', 'gender': '女'}
要素の変更・追加 [updateメソッド]
updateメソッドの引数に他の辞書を指定することで要素を変更・追加できます。
引数に指定された辞書のkeyが、元の辞書に存在する場合に要素は更新され、存在しない場合は要素が追加されます。
辞書1.update(辞書2)
サンプル
代入のサンプルと同じ処理をupdateメソッドを使って実行しています。
profile1 = {'name': '碇シンジ', 'age': '14'}
profile2 = {'name': '綾波レイ', 'gender': '女'}
profile1.update(profile2)
print(profile1)
実行結果
{'name': '綾波レイ', 'age': '14', 'gender': '女'}
nameキーはprofile1に存在したので更新され、genderキーはprofile1に存在しなかったので追加されました。
要素の追加 [setdefaultメソッド]
setdefaultメソッドを使って要素を追加できます。
辞書.setdefault(key, value)
サンプル
試しに要素を追加してみます。
profile = {'name': '碇シンジ', 'age': '14'}
profile.setdefault('gender', '男')
print(profile)
実行結果
{'name': '碇シンジ', 'age': '14', 'gender': '男'}
要素の削除

辞書の要素を削除する方法を紹介します。
指定した要素の削除[del文]
del文を使うことで指定した要素を削除できます。
del 辞書[key]
サンプル
試しに指定した要素を削除してみます。
profile = {'name': '碇シンジ', 'age': '14', 'gender': '男'}
del profile['age']
print(profile)
実行結果
{'name': '碇シンジ', 'gender': '男'}
任意の要素を取り出す [popメソッド]
popメソッドを使って、指定したkeyに関連付けられているvalueを取り出せます。
辞書.pop(key)
リストのpopメソッドと違って、引数には必ずkeyを指定する必要があります。
サンプル
試しに要素を取り出してみます。
profile = {'name': '碇シンジ', 'age': '14', 'gender': '男'}
age = profile.pop('age')
print(age)
print(profile)
実行結果
14
{'name': '碇シンジ', 'gender': '男'}
末尾の要素を取り出す[popitemメソッド]
popitemメソッドを使って、末尾のkeyとvalueをタプルとして取り出せます。
辞書.popitem()
サンプル
試しに要素を取り出してみます。
profile = {'name': '碇シンジ', 'age': '14', 'gender': '男'}
gender = profile.popitem()
age = profile.popitem()
print(gender)
print(age)
print(profile)
実行結果
('gender', '男')
('age', '14')
{'name': '碇シンジ'}
全ての要素を削除する [clearメソッド]
clearメソッドを使って全ての要素を削除できます。
辞書.clear()
サンプル
試しに全ての要素を削除してみます。
profile = {'name': '碇シンジ', 'age': '14', 'gender': '男'}
profile.clear()
print(profile)
実行結果
{}
長さの取得[len関数]

len関数を使って長さを取得できます。
len(辞書)
サンプル
試しに長さを取得してみます。
profile = {'name': '碇シンジ', 'age': '14', 'gender': '男'}
length = len(profile)
print(length)
実行結果
3
keyの検索[in演算子]

in演算子を使うことで、辞書内に指定したkeyが存在するか確認できます。
検索したいkey in 辞書
サンプル
試しに指定したkeyが存在するか確認してみます。
profile = {'name': '碇シンジ', 'age': '14', 'gender': '男'}
age = 'age' in profile
hobby = 'hobby' in profile
print(age)
print(hobby)
実行結果
True
False
並び替え[sorted関数]

辞書にはsortメソッドが存在しないためsorted関数を使います。
sorted(辞書)
keyでソートして、keyのみ格納されたリストを返す
sorted関数の引数に、辞書を指定して実行してみる。
profile = {'name': '碇シンジ', 'age': '14', 'gender': '男'}
sort_profile = sorted(profile)
print(sort_profile)
実行結果
['age', 'gender', 'name']
ソートされたkeyがリストとして返されました。
keyでソートして、リストとして返す
sorted関数の引数に、辞書のitemsメソッドを指定して実行する。
profile = {'name': '碇シンジ', 'age': '14', 'gender': '男'}
sort_profile = sorted(profile.items())
print(sort_profile)
実行結果
[('age', '14'), ('gender', '男'), ('name', '碇シンジ')]
辞書ではなく、タプルを格納したリストとして返されるので気をつけてください。
valueでソートして、リストとして返す
sorted関数の第一引数に、辞書のitemsメソッドを指定し、第二引数でラムダを使ってソートする条件を指定しています。
以下のコードは、valueを基準に昇順で並び替えています。
profile = {'four': 4, 'three': 3, 'one': 1}
sort_profile = sorted(profile.items(), key=lambda v: v[1])
print(sort_profile)
実行結果
[('one', 1), ('three', 3), ('four', 4)]
辞書ではなく、タプルを格納したリストなので気をつけてください。
応用: リスト内に格納された辞書のソート
リストに格納された辞書もソートすることができます。以下のコードでは、scoreキーで並び替えしています。
scores = [
{'name': '朝倉', 'score': 91},
{'name': 'ジョン・スミス', 'score': 63},
{'name': '谷口', 'score': 34},
]
sort_scores = sorted(scores, key=lambda v: v['score'])
print(sort_scores)
実行結果
[{'name': '谷口', 'score': 34}, {'name': 'ジョン・スミス', 'score': 63}, {'name': '朝倉', 'score': 91}]
内包表記を使う

内包表記で{}を使うことで戻り値を辞書にすることができます。
辞書名 = {key: value for 変数 in 反復可能オブジェクト}
サンプル
試しに内包表記で辞書を作成してみます。
d = {i: i * i for i in range(3)}
print(d)
実行結果
{0: 0, 1: 1, 2: 4}
2つのリストから辞書を作成する[zip関数]
zip関数を使うことで、2つのリストを使って辞書を作成できます。
辞書名 = {key: value for key名, value名 in zip(リスト1, リスト2)}
サンプル
試しに2つのリストを作成し、そのリストから辞書を作成してみます。
keys = ['a', 'b', 'c']
values = [1, 2, 3]
d = {k: v for k, v in zip(keys, values)}
print(d)
実行結果
{'a': 1, 'b': 2, 'c': 3}
要素数が違う場合も試してみましょう!
keys = ['a', 'b', 'c', 'd']
values = [1, 2, 3]
d = {k: v for k, v in zip(keys, values)}
print(d)
実行結果
{'a': 1, 'b': 2, 'c': 3}
少ない要素数に合わせて処理されました!
まとめ
この記事では、Pythonの辞書の使い方を解説をしました。
簡単におさらいしておきましょう!
# 宣言・初期化
d = {'key1': 1, 'key2': 2}
# 要素にアクセス
print(d['key1']) # 1
# 要素追加
d['key3'] = 3 # {'key1': 1, 'key2': 2, 'key3': 3}
# 要素削除
del d['key1'] # {'key2': 2, 'key3': 3}
# キー検索
'key1' in d # False
'key2' in d # True
リストだけでなく、用途に合わして辞書などの配列を使うことで、より強固なプログラムを作成できます。辞書は、他の配列に比べて覚えることが多いですが、何回も使って少しずつ慣れていきましょう。
それでは今回の内容はここまでです!それではまたどこかで〜( ・∀・)ノ