【Python】辞書型(dictionary)

URLをコピーする
URLをコピーしました!

Takuyaです。

今回は Python の辞書型について見ていきます。

リスト型、タプル型のように複数の値をまとめて扱うデータ型です。

では順番に見ていきましょう。

目次

確認環境

本記事に記載していることは次の環境で動作を確認しました。

  • Python 3.8.2
  • macOS Catalina 10.15.6

辞書を作成する

辞書の作り方は2通りあります。

{ }を使う方法と dict()を使う方法です。

{ } で辞書を作成する

まずは { }を使う辞書の作り方です。

{ }は波括弧、英語だとbrace(ブレース)、curly bracket(カーリーブラケット)と呼びます。

リストは [ ] 、タプルは ( ) でしたね。

リストとタプルは括弧の中に値を記述するだけでしたが、辞書は キー(key)と値(value)を指定します。

sample_dict1 = {'x': 1, 'y': 2}

この場合、x と y がキー、1 と 2 が値になります。

上記ではキーに文字を指定しましたが、数値やタプルを指定することもできます。リストや辞書はキーに指定することはできません。

dict( ) で辞書を作成する

もう一つの辞書を作る方法は dict()を使います。

{ }で作成した時と同様にキーと値を指定するのですが、書き方が異なります。

sample_dict2 = dict(x=1, y=2)

もう1つ、リストとタプルを使って、次のように書くこともできます。

sample_dict3 = dict([('x', 1), ('y', 2)])

sample_dict1〜3は全て同じ内容の辞書を作成しています。

sample_dict1 = {'x': 1, 'y': 2}

sample_dict2 = dict(x=1, y=2)

sample_dict3 = dict([('x', 1), ('y', 2)])

print(sample_dict1 == sample_dict2 == sample_dict3)
辞書のキーに指定できるのは・・・

辞書のキーに指定できる値はイミュータブル(immutable)なオブジェクトです。
イミュータブルは「不変」という意味ですが、値を変更できないオブジェクトのことを指します。
Python の公式ドキュメントでは、

「Objects whose value can change are said to be mutable; objects whose value is unchangeable once they are created are called immutable.」

https://docs.python.org/2.0/ref/objects.html

と記述されています。

こういう辞書も作れます

辞書のキーとして辞書を指定することはできませんでしたが、辞書の値に辞書を指定することはできます。

test_score = {
    'Aくん': {
        '国語': 80,
        '数学': 90,
        '英語': 70
    },
    'Bさん': {
        '国語': 100,
        '数学': 60,
        '英語': 100
    }
}

これも辞書になります。
辞書の値が辞書になっています。

辞書の値を読み出す

辞書から値を読み出す時はキーを指定して読み出します。

sample_dict1 = {'x': 1, 'y': 2}

print('sample_dict1[\'x\']:', sample_dict1['x'])
test_score = {
    'Aくん': {
        '国語': 80,
        '数学': 90,
        '英語': 70
    },
    'Bさん': {
        '国語': 100,
        '数学': 60,
        '英語': 100
    }
}

print('Aくんのテストの点数:', test_score['Aくん'])
print('Bさんの数学のテストの点数:', test_score['Bさん']['数学'])

人にとってはインデックスを指定して読み出すリストよりも、キーを指定して読み出す辞書のほうが扱いやすいのかな〜と個人的には思います。

辞書に値を追加する

辞書に値を追加したい時は新しいキーを指定して追加します。

sample_dict1 = {'x': 1, 'y': 2}

print('sample_dict1(追加前):', sample_dict1)

sample_dict1['z'] = 3

print('sample_dict1(z追加後):', sample_dict1)

sample_dict1['a'] = 4

print('sample_dict1(a追加後):', sample_dict1)
import pprint

test_score = {
    'Aくん': {
        '国語': 80,
        '数学': 90,
        '英語': 70
    },
    'Bさん': {
        '国語': 100,
        '数学': 60,
        '英語': 100
    }
}

print('<追加前>')
pprint.pprint(test_score, width=10)

test_score['Aくん']['物理'] = 95

print('<追加後>')
pprint.pprint(test_score, width=10)

辞書の値を削除する

続いて、辞書から値を削除する方法をいくつか紹介します。

キーを指定して辞書から値を削除し、削除した値を取得する( pop )

まずはリストにもあったpopメソッドです。

sample_dict1 = {'x': 1, 'y': 2, 'z': 3}

print('sample_dict1:', sample_dict1)

print('sample_dict1.pop(\'z\'):', sample_dict1.pop('z'))

print('sample_dict1(削除後):', sample_dict1)
import pprint

test_score = {
    'Aくん': {
        '国語': 80,
        '数学': 90,
        '英語': 70
    },
    'Bさん': {
        '国語': 100,
        '数学': 60,
        '英語': 100
    }
}

print('<test_score>')
pprint.pprint(test_score, width=10)

print('==========')

print('sample_dict1[\'Bさん\'].pop(\'数学\'):', test_score['Bさん'].pop('数学'))

print('==========')

print('<test_score(削除後)>')
pprint.pprint(test_score, width=10)

del 文で削除する

リストと同じように、del文でも辞書の値を削除できます。

sample_dict1 = {'x': 1, 'y': 2, 'z': 3}

print('sample_dict1:', sample_dict1)

del sample_dict1['z']

print('sample_dict1(削除後):', sample_dict1)
import pprint

test_score = {
    'Aくん': {
        '国語': 80,
        '数学': 90,
        '英語': 70
    },
    'Bさん': {
        '国語': 100,
        '数学': 60,
        '英語': 100
    }
}

print('<test_score>')
pprint.pprint(test_score, width=10)

print('==========')

del test_score['Aくん']['英語']

print('==========')

print('<test_score(削除後)>')
pprint.pprint(test_score, width=10)

最後に追加された値を削除して、削除されたキーと値を取得する(popitem)

pop メソッドと似ていますが、辞書に最後に追加された値を削除して、削除されたキーと値をタプルの形式で取得します。

sample_dict1 = {'x': 1, 'y': 2, 'z': 3}

print(sample_dict1.popitem())
print('==========')
print('sample_dict1(1回目削除後):', sample_dict1)
print('==========')
print(sample_dict1.popitem())
print('==========')
print('sample_dict1(2回目削除後):', sample_dict1)
print('==========')
print(sample_dict1.popitem())
print('==========')
print('sample_dict1(3回目削除後):', sample_dict1)
import pprint

test_score = {
    'Aくん': {
        '国語': 80,
        '数学': 90,
        '英語': 70
    },
    'Bさん': {
        '国語': 100,
        '数学': 60,
        '英語': 100
    }
}

print('<test_score>')
pprint.pprint(test_score, width=10)

print('==========')

print(test_score.popitem())

print('==========')

print('<test_score(削除後)>')
pprint.pprint(test_score, width=10)

popitem メソッドは Python 3.7 以降のバージョンでは最後に追加された値が削除されます。
Python 3.7 より前のバージョンでは、いずれか一つの値が削除されます。

全ての値を削除する(clear)

clearメソッドは辞書の全ての値を削除します。値を全て削除しますが、辞書自体は残り、中身が何もない空の辞書になります。

sample_dict1 = {'x': 1, 'y': 2, 'z': 3}

sample_dict1.clear()

print('sample_dict1(削除後):', sample_dict1)

辞書の値を変更する

リストと同じように、辞書も後から値を変更することができます。キーを指定して、新しい値を代入することで変更します。

sample_dict1 = {'x': 1, 'y': 2, 'z': 3}

sample_dict1['x'] = 99

print('sample_dict1(変更後):', sample_dict1)

辞書を連結する(update)

「連結する」という表現が適切かは微妙ですが、updateメソッドで2つの辞書を連結することができます。

sample_dict1 = {'x': 1, 'y': 2, 'z': 3}

sample_dict2 = {'a': 100, 'b': 200, 'x': 300}

sample_dict1.update(sample_dict2)

print('sample_dict1(update後):', sample_dict1)

辞書のメソッド

リストと同じようにhelp 関数で辞書のメソッドが確認できます。

以上です。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
URLをコピーする
URLをコピーしました!

コメント

コメントする

目次
閉じる