ここではプログラミング言語”Python”の初心者向けに、基本の文法について説明していきます。Python入門の初心者向けの進み方は以下をクリック。(print関数やコメント機能などの基本機能について知らない方は先に読むことをお勧めします。)
この回では、要素にタグを付けることで、複数のデータを管理しやすくする辞書について説明します。
キーワード:辞書、キー、バリュー、del、pop
複数のデータを取り扱うとき、Pythonではリストがありました。
リストでは、複数のデータを一つの変数にまとめて格納することができました。リストの要素の型は基本的に一つに統一することが適しています(異なるデータ型を入れることは可能)。
例えば以下のようになります。
list_1 = ['a', 'b', 'c', 'd'] #全てstr
list_2 = [1, 2, 3, 4] #全てint
list_3 = [0.5, 1.5, 2.5, 3.5] #全てfloat
では、次のような複数データを格納するには、リストは適しているでしょうか?
上のようなデータを以下のようにリストを使って表現することは可能です。
name = ['a', 'b', 'c', 'd', 'e']
from = ['東京都', '広島県', '宮城県', '福岡県', '北海道']
age = [25, 31, 29, 43, 52]
場合によっては、こちらが適しているときもありますが、基本的に、名前や出身地といった情報はいわゆる属性というものです。
これは、ある人のまとまった情報です。このような場合、これらを一つにまとめた方が分かりやすいです。
このようなとき、Pythonでは辞書(dictionary)を使うことができます。
attribute = {
'name':['a', 'b', 'c', 'd', 'e'],
'from':['東京都', '広島県', '宮城県', '福岡県', '北海道'],
'age':[25, 31, 29, 43, 52]
}
上のようにすると複数の概念を一つの枠に入れることが出来ます。辞書の概念を図示すると以下のようになります。
この’name’, ‘from’などの部分が、タグのマークに当たります。各リストは箱の部分です(つまり、データの格納)。
このように辞書とは、複数の概念(タグの部分)を一つの変数にまとめることができます。今は、タグとその中身がセットになったものが格納されているという解釈で良いと思います。
Pythonで辞書を定義するには以下のように書きます。
変数名 = {key_1 : value_1, key_2 : value_2, …, key_n : value_n}
辞書を定義するときは、まず大枠を{ }で囲みます。ちなみにリストは[ ]でした。
次に、keyの部分ですが、ここはキーといって辞書のタグに当たる部分です。valueすなわちバリューには、キーに該当する値を書きます。バリューには、さまざまなデータ型の値を入れることができます。intやfloat, strといった基本的なものから、リストなども入れることができます。
キーとバリューの間には : (コロン)を入れます。この、キー:バリューで一つのまとまりになります。
複数書く場合は、それぞれをカンマで区切ることができます。この辺はリストと同じです。
また、辞書は順番の概念がありません。リストはインデックスと呼ばれる、0から始まる要素の順番がありました。しかし、辞書は要素をキーで指定することができる(後で説明)ので順番は意識する必要がないのです。
具体例で見てみましょう。
people = {
'name':['a','b','c'],
'height':[167.0, 160.0, 176.0],
'weight':[60.0, 57.5, 71.0]
}
上の例では、peopleという変数名の辞書を定義しています。
キーに当たる部分は、’name’, ‘height’, ‘weight’で、コロンの次のそれぞれのバリューがリストで格納されています。
見た感じ、人の身長・体重の情報であることが分かります。今回は、バリューにリストが使われていますが、普通に単独でintやstrなどを入れることもできます。
リストは、インデックスを使うことで中身を指定することができました。辞書ではどうやって指定するのでしょうか?
辞書ではキーを使うことでバリューを指定することができます。
変数名[指定したいキー]
例で見ていきましょう。
people = {
'name':['a','b','c'],
'height':[167.0, 160.0, 176.0],
'weight':[60.0, 57.5, 71.0]
}
print(people['name']) #キー'name'を指定
print(people['weight']) #キー'weight'を指定
#結果
['a', 'b', 'c']
[60.0, 57.5, 71.0]
上の例ではキー’name’、’weight’を指定して、それに当たるバリューを取り出しています。
また、辞書を定義するときは{ }を使うのに対して、指定するときは[ ]を使うことに注意しましょう。
しかし、上の結果ではバリューであるリスト全体を取り出しただけで、その中身を取り出してはいません。よってそれをやってみましょう。
people = {
'name':['a','b','c'],
'height':[167.0, 160.0, 176.0],
'weight':[60.0, 57.5, 71.0]
}
print(people['name'][1]) #キー'name'のバリューの2番目の要素
print(people['weight'][2]) #キー'weight'のバリューの3番目の要素
#結果
b
71.0
上の結果はどうなっているのでしょうか?
まず、people[‘name’]の部分ではリスト[‘a’, ‘b’ ,’c’]が指定されます。その次の[1]の部分はリスト [‘a’, ‘b’ ,’c’] に対してインデックス指定しているということです。つまりこの場合、2番目の’b’が最終的に取り出されます。people[‘weight’][2]に対しても同じです。
この部分について理解できなかった方は、こちらを読むことをお勧めします。 → リスト
辞書の内容を変更・追加するには以下のように書きます。
変数名[指定したいキー] = 変更内容
or
変数名[指定したいキー] = 追加内容
つまり、変更するときと追加するときは同じように書くことができます。例で見ていきましょう。
dic = {1:'a', 2:'b', 3:'c', 4:'d', 5:'e'}
dic[5] = 'f' #'e'から'f'に変更
print(dic)
dic[3] = 'g' #'c'から'g'に変更
print(dic)
dic[6] = 'h' #キーを6, バリューを'h'として追加
print(dic)
dic[7] = 'i'
print(dic) #キーを7, バリューを'i'として追加
#結果
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'f'}
{1: 'a', 2: 'b', 3: 'g', 4: 'd', 5: 'f'}
{1: 'a', 2: 'b', 3: 'g', 4: 'd', 5: 'f', 6: 'h'}
{1: 'a', 2: 'b', 3: 'g', 4: 'd', 5: 'f', 6: 'h', 7: 'i'}
結果が変更・追加されていることに注目しましょう。
では、内容を削除したいときはどうすれば良いでしょうか?
削除するには、delまたはpopを使います。
del 変数名[削除したいキー]
or
変数名.pop(削除したいキー)
例は以下になります。
dic = {1:'a', 2:'b', 3:'c', 4:'d', 5:'e'}
del dic[2] #キー2の要素を削除
print(dic)
delete = dic.pop(5) #キー5の要素を削除
print("delete :",delete)
print(dic)
#結果
{1: 'a', 3: 'c', 4: 'd', 5: 'e'}
delete : e
{1: 'a', 3: 'c', 4: 'd'}
上の例では2行目のdelでキー2の要素を削除しています。また、4行目のpopを使った部分に着目しましょう。popはdelと違い、削除しようとしているバリューを変数に入れることができます。
つまり、削除というよりは抽出するといった方が良いかもしれません(もとの値は削除されます)。
よって単に削除したい場合はdelを、削除したいが後で使うかもしれないというときはpopを使うと良いです。
1.辞書には、キーとバリューがセットになったものが格納することができる。
2.定義は以下である。
変数名 = {key_1 : value_1, key_2 : value_2, …, key_n : value_n}
3.要素の指定方法は以下である。
変数名[指定したいキー] ※{ }ではなく、[ ]を使うことに注意。
4.要素の変更・追加・削除方法は以下である。
・変更 変数名[指定したいキー] = 変更内容
・追加 変数名[指定したいキー] = 追加内容
・削除 del 変数名[削除したいキー] or 変数名.pop(削除したいキー)
クイズは全部で5問あり、正解するごとに難しくなります。
復習してみてね。
Question
Your answer:
Correct answer:
Your Answers
This website uses cookies.