【初心者向け】10章 タプルと辞書【Python】

Python

イテラブルオブジェクトの解説時に飛ばしたタプルと辞書の解説をしていきます。

タプル

タプルの使い方

タプルとは、複数の要素を格納することができるオブジェクト


タプルはリストほとんど同じです。
使い方は以下の通りです。

変数 = (要素1, 要素2, 要素3, ....)


括弧() は省略可能ですが、わかりづらいのでつけるようにしましょう。
実際にプログラムで確認していきます。


コード

# 変数宣言
tuple_test = ("一個目", "二個目", "三個目", "四個目")

# 出力
print(tuple_test)


実行結果

('一個目', '二個目', '三個目', '四個目')


タプルもインデックスを指定しての表示が可能です。インデックスは0番目からなので注意してください。


コード

# 変数宣言
tuple_test = ("一個目", "二個目", "三個目", "四個目")
len_tuple_list = len(tuple_test)
count = 0

# 出力
while count < len_tuple_list:
    print("tuple_test[", count, "]:", tuple_test[count])
    
    count = count + 1


実行結果

tuple_test[ 0 ]: 一個目
tuple_test[ 1 ]: 二個目
tuple_test[ 2 ]: 三個目
tuple_test[ 3 ]: 四個目


「 len_tuple_list = len(tuple_test) 」のように要素数もリスト同じように扱えます。

リストとタプルの違い

上記を見る限りではリストとの違いは無いように思えますが、明確な違いがあります。

・リストは要素の操作ができる
・タプルは要素の操作ができない


リストは要素の変更、追加、削除ができました。


コード

# 変数宣言
list_test = ["一個目", "二個目", "三個目", "四個目"]
print(list_test)

# インデックス 1 の要素を変更
list_test[1] = "にこめ"
print(list_test)


実行結果

['一個目', '二個目', '三個目', '四個目']
['一個目', 'にこめ', '三個目', '四個目']


しかしタプルでは要素の変更、追加、削除はできず、エラーになります


コード

# 変数宣言
tuple_test = ("一個目", "二個目", "三個目", "四個目")
print(tuple_test)

# インデックス 1 の要素を変更
tuple_test[1] = "にこめ"
print(tuple_test)


実行結果

/Users/python/python-for-blog $ /usr/bin/python3 /Users/python/python-for-blog/tuple_not_operation.py
('一個目', '二個目', '三個目', '四個目')
Traceback (most recent call last):
  File "/Users/python/python-for-blog/tuple_not_operation.py", line 6, in <module>
    tuple_test[1] = "にこめ"
TypeError: 'tuple' object does not support item assignment


そしたらタプルの使い道は?となります。タプルは変更を許さないデータを扱う時に使います。

例えば曜日を扱うとします。曜日は「日月火水木金土」で変わることはありません。
これをリストで扱い、途中で意図せず要素の変更がされてしまうと、バグの原因となります。


最初からタプルで扱うと必ずエラーとなりますので動作確認時に気づくため、バグになることはありません。


敢えてタプルを使うことで、他のチームメンバーに要素を変更させてはいけないと意識づけさせることができたり、意図しない操作の防止もできます。

辞書

リストやタプルは要素を扱う時インデックスを使っていました。
辞書では要素と結びつけるキーと呼ばれるものを使用します。

辞書の使い方

辞書の使い方は以下の通りです。

変数 = {キー1:要素1, キー2:要素2, キー3:要素3,...}


コード

# 変数宣言
dict_test = {"key1":"value1", "key2":"value2", "key3":"value3"}

# 出力
print(dict_test)


実行結果

{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}


リストの時にインデックスを使用した時と同様に、キーを使うことで、それぞれの要素を取り出すことができます。


コード

# 変数宣言
dict_test = {"key1":"value1", "key2":"value2", "key3":"value3"}

# 出力
print(dict_test["key1"])
print(dict_test["key2"])
print(dict_test["key3"])


実行結果

{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
value1
value2
value3

辞書の操作

辞書の追加・変更・削除はどのようにして行うのかみていきます。

要素の追加

要素の追加方法は以下の通りです。

変数名[使用されていないキー] = 値


既にキーとして登録されていないキーを指定して代入することで追加できます。
キー:key4、要素:value4 を追加する例を挙げます。


コード

# 変数宣言
dict_test = {"key1":"value1", "key2":"value2", "key3":"value3"}

# 出力
print(dict_test)

# 要素追加
dict_test["key4"] = "value4"

# 出力
print(dict_test)


実行結果

{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
{'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key4': 'value4'}

要素の変更

要素の変更方法は以下の通りです。

変数名[変更したい要素のキー] = 値


変更したいキーを指定して代入することで要素を変更することができます。
キー:key2 の 要素:value2 を バリュー2 に変更する例を挙げます。


コード

# 変数宣言
dict_test = {"key1":"value1", "key2":"value2", "key3":"value3"}

# 出力
print(dict_test)

# 要素追加
dict_test["key2"] = "バリュー2"

# 出力
print(dict_test)


実行結果

{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
{'key1': 'value1', 'key2': 'バリュー2', 'key3': 'value3'}

要素の削除

要素の削除方法は以下の通りです。

del 変数[削除したい要素のキー]


キー:key2 の、要素:value2 を削除する例を挙げます。


コード

# 変数宣言
dict_test = {"key1":"value1", "key2":"value2", "key3":"value3"}

# 出力
print(dict_test)

# 要素追加
del dict_test["key2"]

# 出力
print(dict_test)


実行結果

{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
{'key1': 'value1', 'key3': 'value3'}


辞書の最大の特徴としては、要素の追加・削除があっても要素とキーの関係は変わりません。
リストとタプルの時は、要素の追加・削除があると要素とインデックスの関係は一つずつずれました
プログラムで確認します。


コード

# 変数宣言
dict_test = {"key1":"value1", "key2":"value2", "key3":"value3"}
list_test = ["一個目", "二個目", "三個目", "四個目"]

# 出力
print("dict_test[\"key3\"]:", dict_test["key3"])
print("list_test[2]:", list_test[2])

# 要素追加
del dict_test["key2"]
del list_test[1]

# 出力
print("dict_test[\"key3\"]:", dict_test["key3"])
print("list_test[2]:", list_test[2])


実行結果

dict_test["key3"]: value3
list_test[2]: 三個目
dict_test["key3"]: value3
list_test[2]: 四個目

辞書のfor文

辞書をfor文で書くとどのような動きをするのか見ていきます。
テストスコアを辞書に格納し、表示させるプログラムを例で見てみます。


コード

# 変数宣言
test_score = {"math":"90", "japanese":"78", "english":"84"}

# 出力
print(test_score)

for dict_key in test_score:
    print("変数dict_keyに格納されている値:", dict_key)
    print("test_score[", dict_key, "]:", test_score[dict_key])


実行結果

{'math': '90', 'japanese': '78', 'english': '84'}
変数dict_keyに格納されている値: math
test_score[ math ]: 90
変数dict_keyに格納されている値: japanese
test_score[ japanese ]: 78
変数dict_keyに格納されている値: english
test_score[ english ]: 84




for文で見てみるとリストやタプルでは要素がそのまま変数に格納されていましたが、辞書においては要素ではなくキーが変数に格納されています。要素を使いたい場合はそのキーが格納された変数を用いて使います。

練習問題

問題1
タプルを使う時にエラーになるもの次のうちどれか。
(ア) タプルをfor文で使用する。
  例:for str in タプル:
     処理
(イ) タプルに要素を追加する。
  例:tuple_test = (“A”, “B”, “C”)
    tuple_test.insert(3,”D”)
(ウ) タプルの要素を出力する。
  例:tuple_test = (“A”, “B”, “C”)
    print(tuple_test[0])


正解は(イ)
タプルは要素の追加・変更・削除ができないオブジェクトです。


問題2
辞書の解説時の例(数学の点数:90点、日本語の点数:78点、英語の点数:84点をfor文を使って表示するプログラム)のコードに以下の処理を追加せよ。
1.日本語の点数を80に変更。
2.理科:69点、社会:94点を変数test_scoreに追加。


コード

# 変数宣言
test_score = {"math":"90", "japanese":"78", "english":"84"}


# 日本語のテストの点数を変更
test_score["japanese"] = "80"

# 理科と社会の点数を追加
test_score["science"] = "69"
test_score["society"] = "94"

# 出力
print(test_score)

for dict_key in test_score:
    print("test_score[", dict_key, "]:", test_score[dict_key])


実行結果

{'math': '90', 'japanese': '80', 'english': '84', 'science': '69', 'society': '94'}
test_score[ math ]: 90
test_score[ japanese ]: 80
test_score[ english ]: 84
test_score[ science ]: 69
test_score[ society ]: 94