こんにちは!ぼりたそです。今回はデータ型の中でも辞書型(dictionary)についてまとめた記事を作成してみました。
この記事は以下のポイントでまとめています。
辞書とは何だろう?、どうやって扱えばいいの?と思っている方はぜひ参考にしてみて下さい。
辞書とは?
辞書とはデータ型の一つであり、タプルやリストと同様に要素を複数持つことができるデータ構造を持ちます。タプルやリストと異なるのは要素がキー(key)と値(value)の対になっているということです。キーと値は:で区切られており{ }(波括弧)で括られた形式を取ります。例えば、{鮭 : 魚類, うさぎ : 哺乳類, ぼりたそ : 鳥類}といった書き方をします。この例の場合、鮭、うさぎ、ぼりたそがキーであり、魚類、哺乳類、鳥類が値となります。
辞書の作成
辞書の作成についてですが、主に以下の2つの方法があります。
- キーと値を{}で括る
- dict()の使用
キーと値を{}で括る
辞書を作成する1つ目の方法としては単純にキーと値を{}(波括弧)で括ることです。
d = {'ヒト':'人', '馬':'頭', '魚':'尾'}
print(type(d))
#出力結果
#<class 'dict'>
dict()の使用
辞書を作成する二つ目の方法は辞書型のコンストラクタであるdict()を使用することです。コンストラクタとはインスタンスを生成する際に使用するメソッドです。クラスに関してはまた別の記事でご紹介します。また、dict()を使用する際の引数はキー=値という形式にする必要があり、キーは変数で命名可能な文字列に限られます。さらにキーが重複するとエラーとなるので注意が必要です。
d = dict(human='人', house='頭', fish='尾')
print(d)
#出力結果
#{'human': '人', 'house': '頭', 'fish': '尾'}
d = dict('ヒト'='人', '馬'='頭', '魚'='尾')
print(d)
#出力結果
#SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
#キーに変数で使用できる文字列を設定していないためエラーとなる
d = dict(human='人', house='頭', fish='尾', fish='尾')
print(d)
#出力結果
#SyntaxError: keyword argument repeated
#キーが重複するためエラーが発生
要素の追加
辞書の要素を追加する方法として主に以下の二つが挙げられます。
- d[key] = valueとして要素を指定
- updata()メソッド
d[key] = valueとして要素を指定
辞書に要素を追加する方法としてキーを指定する方法があります。
d = {'ヒト':2, '犬':4, 'カブトムシ':6}
d['タコ'] = 8
print(d)
#出力結果
#{'ヒト': 2, '犬': 4, 'カブトムシ': 6, 'タコ': 8}
update()メソッド
辞書に要素を追加する方法としてupdateメソッドを使用することが挙げられます。また、updateメソッドの引数として使用するキーは変数名に使用できる文字列でないとエラーが発生します。さらに、変数名が重複する場合もエラーとなります。
d = {'human':2, 'dog':4, 'beetle':6}
d.update(fish=0)
print(d)
#出力結果
#{'human': 2, 'dog': 4, 'beetle': 6, 'fish': 0}
d = {'human':2, 'dog':4, 'beetle':6}
d.update(beetle=6)
print(d)
#出力結果
#SyntaxError: invalid character in identifier
#キーが重複するためエラーが発生
要素の削除
要素の削除を行う場合、主に以下の4種の方法があります。
- clear()メソッド
- pop()メソッド
- popitem()メソッド
- del文
clear()メソッド
要素を削除する方法の一つとしてclear()メソッドが挙げられます。clear()メソッドは辞書の要素を全て削除するメソッドとなります。
d = {'human':2, 'dog':4, 'beetle':6}
d.clear()
print(d)
#出力結果
#{}
pop()メソッド
辞書の要素を削除する方法としてpop()メソッドの使用も挙げられます。pop()メソッドは指定したキーを削除し値を返すメソッドになります。
d = {'human':2, 'dog':4, 'beetle':6}
d_pop = d.pop('human')
print(d)
print(d_pop)
#出力結果
#{'dog': 4, 'beetle': 6}
#2
popitem()メソッド
辞書の要素を削除する方法としてpopitem()メソッドもあります。pop()メソッドと似ていますが、popitem()メソッドは辞書の要素を削除してキーと値を返してくれます。ただし、どの要素を削除するかは選択することができず、一番最後の要素が削除されます。
d = {'human':2, 'dog':4, 'beetle':6}
k, v = d.popitem()
print(d)
print(k, v)
#{'human': 2, 'dog': 4}
#beetle 6
del文
辞書の要素を削除する方法として最後にご紹介するのがdel文です。del文は指定したキーの値を削除し、削除する値も任意に選択することができます。
d = {'human':2, 'dog':4, 'beetle':6}
del d['dog']
print(d)
#出力結果
#{'human': 2, 'beetle': 6}
要素の並び替え
辞書の要素はリストと同様に並び替えすることができます。辞書は冒頭で解説した通り要素がキーと値のセットになっているのでキーと値でそれぞれ並び替えることがきます。方法は以下の通りです。
- sorted()メソッド
sorted()メソッド
キーで並び替える
辞書を並び替える方法としてはsorted()メソッドを使用することが挙げられます。まずはキーを並び替えるサンプルコードをご紹介します。
#キーを並び替え
d = {'human':2, 'dog':4, 'beetle':6}
d = sorted(d.items())
print(d)
#出力結果
#[('beetle', 6), ('dog', 4), ('human', 2)]
sorted()の引数をd.items()にすることでキーと値を参照しつつ、ソートはキーを基準としています。しかし、出力結果を見るとリストの中にタプルとしてキーと値だった要素が格納されています。これでは辞書の構造を保てていませんね。以下はこのリストを辞書に戻す記述となります。
#キーを並び替え、辞書に再変換
d = {'human':2, 'dog':4, 'beetle':6}
d = sorted(d.items())
d = dict(x for x in d)
print(d)
#出力結果
#{'beetle': 6, 'dog': 4, 'human': 2}
dictメソッドの引数に先ほどのリスト内のタプル要素を参照することで辞書に変換しています。
値で並び替える
続いては値を並び替える方法についてですが、こちらも同様にsorted()メソッドを使用します。キーを並び替えた場合と異なるのはsortedメソッドの第二引数keyに関数を用いていることです。第二引数のkeyはソートに使用するデータを参照する引数であり、辞書のキーとは別ものなので注意しましょう。
#値を並び替え辞書に再変換
d = {'human':2, 'dog':4, 'beetle':6}
d = sorted(d.items(), key=lambda x:x[1])
d = dict(x for x in d)
print(d)
#出力結果
#{'human': 2, 'dog': 4, 'beetle': 6}
出力結果はきちんと値で並び替えられていますね。sortedメソッドの第二引数のkeyにlambda~と記述していますが、これは無名関数と言われるものです。また別の記事で解説しますが、特に命名せずに一行で簡易的に関数を記述することができます。サンプルコードで登場した無名関数はd.items()の要素であるキーと値が格納されているタプルのインデックス番号1のデータ、つまり値のデータを参照すると言った関数になっているため、ソートが値でかけられています。
終わりに
以上、辞書に関して解説してみました。最後の並び替えで登場したlambdaについては何これ?と思われた方もいるかと思います。これは無名関数と言って関数の仲間であり一行で関数を記述できることから簡易的な処理に使用されることが多い関数となります。無名関数についてはまた別の記事にて解説したいと思います。辞書はとてもリストやタプル同様に非常に重要な概念になりますので、しっかりと覚えたいですね!