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)
全ての値を削除する(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 関数で辞書のメソッドが確認できます。
以上です。
コメント