python入門講座 | dict型の使い方1(辞書型の特長とlist型との違い)[第28回]

アラサーOLのためのpython入門講座
keyを使って値を格納・参照できるため、何番目に何が格納されているかを覚えている必要がありません。

Ciao!みなさんこんにちは!このブログでは主に
(1)pythonデータ解析,
(2)DTM音楽作成,
(3)お料理,
(4)博士転職
の4つのトピックについて発信しています。

今回は「アラサーOLのためのpython入門講座」です!この講座では、プログラミング初心者アラサーOLのMi坊さんに、pythonを学習する上でのアドバイスを行います!「パソコンもプログラミングも初心者だけど、プログラミングができるようになりたい!」という方のためにstep-by-stepで解説していきます。

今回からdict型(辞書型)という型の扱い方を解説します。今日はdict型変数の特長についてです。dict型はlist型と同様、複数の値を格納できます。格納された値を呼び出すときにindex番号ではなく、keyと呼ばれる名前で呼び出すことができます。このため、格納された変数の順番を意識する必要がありません。プログラムの冒頭でパラメータをいくつか定義しておいて、後段で呼び出したいときに便利です!

この記事を読めば、dist型変数の特長とlist型との違いを知ることができます。ぜひ最後までお付き合いください!

Kaiko
Kaiko

この記事はこんな人におすすめ

  • 初心者だけどpythonを始めた!
  • pythonの基本的な使い方を知りたい!
  • 独学で学んだpythonの知識を整理したい!

Abstract | 後で参照したい値の格納に便利なdict型

dict型(辞書型)は、予め定義された値をプログラムの中で呼び出すといった用途に便利です。dict型はlist型と同じように、複数の値や変数を配列的に格納できる変数です。list型では格納された値をindexという番号で参照するのに対し、dict型ではkeyという名称で参照します。indexは格納された順に番号が付与されますが、keyは自分で定義できます。そのためdict型では「何番目に何が格納されているか」を覚えておく必要はありません。わかりやすいkeyで値を格納しておけば、後でスムーズに参照することができます。

list型とdict型を目的に応じて使い分けることでpythonプログラミングをレベルアップできます。まずは今回の記事でdict型の特長と使い所を把握しましょう!



Method | dict型の特長とlist型との違い

dict型(辞書型)の特長とlist型との違いについて解説します。dict型の特長は

  1. keyを使って値を格納、参照できる (list型と異なる)
  2. どんな型の値や変数でも格納できる (list型と同じ)

ということです。2つめのどんな型の値や変数でも格納できるというのは前回までに扱ったlist型と同じ特長です(過去記事「python入門講座 | List型の使い方1(リストを作成する方法)[第23回]」参照)。inta型、float型、str型などの単一の変数はもちろん、dict型の中にdict型やlist型を格納して入れ子構造にすることも可能です。1つめの特長はlist型とは異なるものなので、以下で詳しくみてみましょう。

dict型の特長: 格納された値をkeyで格納して呼び出せる

dict型の最大の特長は上記1つめの、keyを使って値を格納・参照できることです。Keyというのはlist型でいうindexと同じで、格納された値の番地を指定する記号です。ただし、list型のindexとは異なり数値だけでなく、文字列(str)や小数(float)を使うことができます。実際のプログラミングの場面では、文字列を使って格納された値にふさわしい名前をkeyとすることで参照がわかりやすくなります。

dict型の使用例1: エヴァンゲリオンのキャラクターと声優の対応表

まずはdict型の使用例を見てみましょう。例えば、エヴァンゲリオンのキャラクターの声優の名前をプログラムの中で呼び出したいとします。キャラクターの名前をkeyとして、声優の名前を変数として格納するには以下のようにします。

# define a dict
voice_acts = {
    'Rei': '林原めぐみ',
    'Shinji': '緒方恵美',
    'Aska': '宮村優子',
    'Misato': '三石琴乃',
    'Ritsuko': '山口由里子',
    'Gendo': '立木文彦',
    'Kaworu': '石田彰',
    'Ryoji': '山寺宏一'
}

このようにvoice_actsというdict型の変数を定義します。プログラムの後段で声優の名前を参照したいときには、キャラクターの名前をkeyにして呼び出すことができます。例えば、碇シンジの声優名を知りたいときには

# show the voice actor for Shinji
print('VA for Shinji: ', voice_acts['Shinji'])  # 緒方恵美

とvoice_acs[‘Shinji’]とすることで参照できます。

値の追加も簡単(順番を意識する必要がない)

dict型変数に値を追加するのは簡単です。順番を意識する必要がありません。次のようにします。

# add Mari to the dict
voice_acts['Mari'] = '坂本真綾'



dict型の使用例2: 入れ子のdict

dict型変数の中にdict変数を格納した入れ子構造にしてあげて、多次元配列的に扱うことも可能です。先程のエヴァンゲリオン声優の例に、声優の誕生日と担当するエヴァンゲリオンを追加してみましょう。

# define charactor's profile
char_profs = {
    'Rei': {'VA': '林原めぐみ', 'BD': '0330', 'Eva': '00'},
    'Shinji': {'VA': '緒方恵美', 'BD': '0606', 'Eva': '01'},
    'Aska': {'VA': '宮村優子', 'BD': '1204', 'Eva': '02'},
    'Misato': {'VA': '三石琴乃', 'BD': '1208'},
    'Ritsuko': {'VA': '山口由里子', 'BD': '1121'},
    'Gendo': {'VA': '立木文彦', 'BD': '0429'},
    'Kaworu': {'VA': '石田彰', 'BD': '1102'},
    'Ryoji': {'VA': '山寺宏一', 'BD': '0617'}
}

このようにchar_profsというdict型変数を定義しました。変数の値を参照するときには、keyを2つ使います。1つ目のkeyにはキャラクター名、2つめのkeyにはどの属性情報を取得するか指定するものを入れます。例えば、碇シンジの声優と誕生日と担当エヴァを参照するなら以下のようにします。

# define the 1st key
k1 = 'Shinji'

# show the voice actor and birthday
print("%s's VA:" % (k1), char_profs[k1]['VA'])
print("%s's BD:" % (k1), char_profs[k1]['BD'])
print("%s's Eva:" % (k1), char_profs[k1]['Eva'])

2つ目のkeyを’VA’とすれば声優(Voice Actor)、’BD’とすれば誕生日(BirthDay)、’Eva’とすれば担当エヴァンゲリオンを参照することができます。



list型との違い: dict型では格納された順番を気にする必要がない

list型とdict型の大きな違いとして、dict型では格納された要素の順番、すなわちindex番号を覚えている必要がないということがあります。list型でも同じように複数の変数を格納できますが、値を参照するときには「先頭から何番目」というように順番を覚えておく必要があります。

またエヴァンゲリオンの例を見てみましょう。キャラクター名と声優名の対応表は2次元リスト(list in list)を使って作成できます。

# define a dict as list
voice_acts = [ 
    ['Rei', '林原めぐみ'], 
    ['Shinji', '緒方恵美'], 
    ['Aska', '宮村優子' ]
]

キャラクター名と声優名のリストを格納した2次元リストとして定義しました。このような2次元リストの場合、0次元目のindex番号0が綾波レイ、1が碇シンジ、2がアスカであることを覚えておく必要があります。碇シンジの声優を参照するなら、index番号1に格納されていることを覚えておく必要があります。

# show the voice actor for Shinji
print('VA: ', voice_acts[1])  # You need to know the index for Shinji

dict型では順番は関係ありません。keyだけで値を参照することができます。

値を追加する際もlist型では、

# add Mari to the list
voice_acts.append(['Mari', '坂本真綾'])

のように、listの最後に追加することになります。この例ではマリを使いしていますが、3番目のindexに追加されたことを覚えておく必要があります。dict型ではこのことを気にしなくていいので楽です。



余談: Keyとして利用できる値(str, int, floatなんでも可)

index番号とは異なり、int、float、str何でも使うことができます。Keyは数値である必要がないので間が飛んでいても構いません。例えば、以下のようにdict型の変数を定義することができます。

# define a dict
var_dict = {'pi':3.14, 0:'zero', 2.72:'e', 1:'unity'}

# show all
print(var_dict)

# show pi
print('pi:', var_dict['pi'])

# show 0
print('0:', var_dict[0])

# show 2.72
print('2.72:', var_dict[2.72])

# show 1
print('1:', var_dict[1])

実戦ではこのようなちぐはぐな変数定義をすることはないですが、極論、Keyにint型、float型、str型を混ぜる事もできてしまうわけです。



Result | dict型の使い所2選

dict型の特長を踏まえた上で、dict型変数の使い所を2つ紹介します。

パラメータの定義: keyを使ってスムーズに参照

1つ目はプログラムで使うパラメータの定義です。後段で参照したい値が複数あるとき、list型ではなくdict型で定義しておくと、keyで呼び出すことができます。list型では「何番目になんの値が入っているか」を覚えておく必要がありますが、dict型では不要です。呼び出しやすいkey名称を定義しておけばスムーズに呼び出すことができます。

list型の代わり: 順番を意識せず格納・参照、欠番があってもOK

2つ目はlist型で定義するところをdict型に変えるというものです。これは、

  • 順番を意識するのが面倒な場合
  • indexに欠番が想定される場合

ここでは詳しく書きませんが、list型で変数を定義しようとすると不都合がある場合にdict型を使うということです。

今回のコーディング例(jupyter notebook)

今回の記事でコーディングしたjupyter notebookの例はこちらです。参考にしてみてください!



Conclusion | まとめ

最後までご覧いただきありがとうございます!
今回はdict型変数の入門編として、その特長と使い所を解説しました。list型との違いを覚えておけば、list型が使いにくところでdict型を使うといった使い分けができるようになります!pythonプログラミングのレベルアップをしていきましょう!

以上「python入門講座 | dict型の使い方1(辞書型の特長とlist型との違い)」でした!
またお会いしましょう!Ciao!



References | 参考

以下の教科書を参考にして進めています!より詳しく学びたい方は購入して読んでみてください!

Pythonの参考教科書

コメント

タイトルとURLをコピーしました