てつまぐ

Python dictの使い方

今回は配列と同じような、データの集まりであるdict(辞書)について習得していきます。

配列は、データを取得するときには、index(配列番号)からデータを取得します。

dictの辞書型は辞書と呼ばれる通り、索引からデータを取得します。

例えば、名前のデータが欲しい場合、索引として「名前」とすることでデータが取得できます。

詳しくみていきましょう。

本記事のサンプルコード

>> サンプルコード(jupyter notebook)

dict(辞書)について

dictはキー(索引)からデータを取得することができます。

ですので、dictの宣言は次のように、キーデータをいくつも入れます。

キー: データはカンマ「,」で区切り、それらを波かっこで囲むだけです。

実際のコードは次のようになります。

注意ポイント
  1. キー値は数値でも動きますが、お勧めしません。1でも1.0でも動く。
  2. キー値は英語でわかりやすい名前が良い
  3. 最後のデータ(data3)の後ろのカンマはあってもなくても良い

dictはそのデータに名称があると扱いやすいデータで使う

listは、例えば、時系列データとかで使えます。

dictはそのデータに名称があると扱いやすいデータで使います。

例えば、従業員の名前、ID、部門とかはdictの方が取り扱いやすいでしょう。

ID 名前 部門
1234 鈴木 営業
1222 佐藤 総務

dict(辞書)の基本

では、dictを使っていきます。

dictデータをつくる

先ほどの従業員の表から作ってみましょう。

みやすくするために、dictを作るときに改行していますが、1行でもOKです。

データを取り出してみます。

employee[キー]で取り出せます。

一人分のデータしか作れていませんね。

二人分を作って配列に入れてみます。

組み込み関数dictを使って作る

「dict」という、組み込み関数を使っても作ることができます。

>> python 公式ドキュメント

先程の、employeeと同じものを作ります。

同じデータが作れます。

こちらは、あまり見かけません。

どちらの記述ができても、???とならないように、両方覚えておきましょう。

キーと値を取り出すにはkey,value,itemメソッドを使う

dictからはキーと値を取り出すことができます。

取り出すには、keys、values、itemsを使います。

>> python公式 辞書ビューオブジェクト

コードにしてみます。

それぞれ、型はlistではないので、listに変換することもできます。

データの更新とデータの追加

更新、追加の方法は同じです。

データの更新/データの追加

dict名[キー値] = データ

コードにしてみます。

従業員の部門が変わって、役職がついたとします。

 

更新と追加の前後でデータが変わって、開発の係長になりました。

データを結合するメソッドは2種類

結合には2種類あります。

updateメソッド

一つ目はupdateメソッドを使う場合。

updateメソッド

dict名.update(追加するdict名)

updateは、追加もできますが、重複するデータは上書きします。

重複がなく、データが追加される場合

employeeにadd_dataが追加されます。

departmentが重複している場合

重複分は上書きされます。

dictメソッド

2つ目は組み込み関数のdictを使う場合。

dictに**をつけて、データを与えます。

組み込み関数のdictを使う場合

新しいdict名 = dict(**dict名, **dict名)

結合されたデータは新しいdict名で入れてあげます。

この方法は、重複したキーがあるとエラーが出ます。

試してみてください。

削除するメソッドは4種類

削除する方法は4つあります。

メソッド / 文 機能
clear 若しくは {} 全削除
pop(キー値) 指定したキーの値を取り出す
popitem() 末尾のキー、データを取得
del dict名[キー] 指定したデータを削除

同様にemployeeデータで見ていきます。

clear(全削除)メソッド

全削除は、データ読み直しや初期化で使います。

= {}を使う方法も紹介します。

popメソッド

pop(キー)ではlistと同じで、データを取り出します。

取り出しなので、取り出した分が削除になります。

idのデータをpopしてみましょう。

popitemメソッド

popitemはpopと同じで取り出します。

popitemは末尾のデータを取り出します。

del

del では指定したデータを削除することができます。

del dictデータ[キー]とすることで、削除ができます。

注意ポイント

メソッドではないので、かっこ不要です。

del(dictデータ[キー])ではないのでご注意ください。

では、コードで確認します。

dict(辞書)の応用

さて、ここからさらに使いこなせるようになっていきましょう。

for文で使う

辞書と繰り返し処理はよく使うので、しっかり習得していきましょう。

dictデータをそのまま使った場合は、key値が取り出せます。

取り出したキー値を使って、employeeからデータを取得しています。

items()を使った繰り返しでは、キー値とデータが取り出せます。

入れ子構造のデータにする

基礎のところでは、下記のデータを1行ずつdictデータにして、配列に入れました。

ID 名前 部門
1234 鈴木 営業
1222 佐藤 総務

 

これは、dictを入れ子にして作ることもできます。

idの値をキーにして、入れ子構造にしてみます。

この方法や配列にする方法、どれが正しいというのはありません。

わかりやすい方法を使用しましょう。

キーの有無はinを使って確認

キー値があるかどうかの確認はよく使います。

キー値がなければ、エラーとなる処理もあるためです。

キーの有無は、keysで取得できるkey値のデータに対して、inを使って確認します。

キー値の有無確認

確認したいキー値 in dict.keys()

とします。同様に、valuesで値の存在確認もできます。

if文と一緒に組みわせて使うことが多いです。

並べ替えにはsortedを使う

dictの並べ替えは、キー値とデータがありますが、それぞれ並べ替えができます。

並び替えにはsortedを使います。

sortedにdictデータ.items()でキー値とデータを渡して、reverseで昇順(False)と降順(True)を指定します。

並び替え

sorted(dictデータ.items(), reverse=True/False)

まず、キー値の並べ替えをしていきます。

並び替えがわかりやすいようにデータを({‘鈴木’: 90, ‘佐藤’: 70, ‘田中’: 80})に変更します。

次は、データの方を並び替えます。

まず、sortedに渡してる、employee.items()を確認します。

キー値,データが並んでおり、2列目のデータを並び替えたいということになります。

この2列目の指定は、無名関数(lambda)を使うとできます。

sortedの引数にkey=lambda e: e[列番号]を指定します。

並び替え

sorted(dictデータ.items(), reverse=True/False, key=lambda e: e[列番号])

列番号は0から始まる番号です。今回は2列目なので列番号=1となります。

無名関数は、関数の一種です。

とりあえずは、この並べ替えも決まり文句のようなものですので、こういうものだと理解しておけばOKです。

まとめ

この記事ではdictの使い方の基礎と応用を紹介しました。

よく使いますので、しっかり理解しましょう。

お買い物カゴ