第8回 Python座学 辞書型(dict)と集合型(set)

プログラミング

辞書型(dict型)

リストやタプルが「順序を保ったオブジェクトの並び(シーケンス)」で、整数値のインデックスでアクセスするのに対して、辞書型(dict)のオブジェクトは「名前と値のペアが集まった順序も持たない集合」で、書き換え不可(イミュータブル)な型でもキー(名前)として使うことができます
キーだけの変更は不可なので変更する場合はキーと値のペアを追加、削除をすることになります
辞書自体は書き換え可能(ミュータブル)です

辞書型のオブジェクトをつくるには、キーと値を「:」でつなぎ、全体を{}で囲みます

  • 代入先の変数={ キー1 : オブジェクト1 , キー2 : オブジェクト2}

見た感じはリストと似ていますが少し違いますね
攻撃などの行動に内容が関連付けられています

辞書に格納されているオブジェクトを呼び出すには

  • print(辞書名[キー])

と書きます

リストでは番号を指定していましたが、辞書型ではキーを入力します

次に上画像2行目で「effect」辞書の「スキル」のオブジェクトを「強化」から「回復」に変更しました

  • 辞書名 = [ ‘ キー ‘ ] = ‘ オブジェクト ‘

これで変更したいオブジェクトのみを変更することができます

次にキーと値の追加です

キーを「魔法」オブジェクトを「強化」で追加しました
書き方はオブジェクトの変更と同じです
ようするに辞書の中にないものを同じ書式で書けば勝手に追加されるわけです
キーに誤字があると増えてしまうので気を付けましょう

では実際に辞書内の要素を削除してみましょう

  • del 辞書名[‘キー’]

これでキーそのものと関連付いているオブジェクトを消すことができます
「del」は「delete(消去)」の略なので覚えやすいかと思います

インテレーションアクセス

辞書の要素は [ ] でキーを指定すれば値を取り出すことができます
さらに、 forステートメントを使いすべてのキーをインテレート(反復処理)することも可能です
まずはキーの値の呼び出しです

  • for key in 辞書名:
    print (key)

次にvalues()メソッドでオブジェクトの値の呼び出し

  • for value in 辞書名.values():
    print (value)

最後にitems()メッソドでキーとオブジェクトをすべて呼び出します

  • for item in 辞書名.items():
    print(item)

複数のシーケンスのインテレート

リストやタプルなど複数のシーケンスに対して同時にインテレートしたい場合、zip関数()を使いましょう
この関数で作られるインテレーターはタプル型(書き換え不可)になります

  • for 辞書1,辞書2,辞書3 in zip(辞書1,辞書2,辞書3):
    print(辞書1, ‘任意のリテラル’ ,辞書2, ’任意のリテラル’ ,辞書3)

今回は3個の辞書を使って組み立ててみました
各辞書の要素が頭から順に1つずつ取り出され出力されています

「in」のあとのzip()で各要素が1つずつ取り出され、「for」のあとの各辞書名に格納されます

次は、list関数を使い「2つのリストから」キーとオブジェクトを作ってみます

list関数zip関数で作られたインテレーターをリストにまとめました
リストにそれぞれの要素のリストが入っています

次に、dict関数を使い出力してみます

dict関数でzip()を引数にし、attackをキーに、subjectをオブジェクトにした辞書が作成できました

ここで注意点です

3つ以上の要素をzip関数でまとめる場合、dict関数ではエラーが出ます
dict関数で管理できるのはキーとオブジェクトの2つのみなので、3つ以上管理する場合はlist関数を使いましょう

重複させない集合型(set型)

対して集合型(set)はリストやタプルと同様に複数のデータを一つにまとめるものですが、「重複した要素を持たない」という違いがあります
集合は、{}の中で「 , 」で区切ることで作れます

  • 単なる集合・・・{ 要素1 , 要素2}

重複しないので出力されるのは火のみ

集合の重複した値を持たない特徴を生かし、リストから重複した要素を取り除くような場面で使うことができます

  • set関数・・・set( 要素 )
文字列を集合に
リストを集合に

リストを集合に変換しただけで重複した要素がなくなるので、もう一度リストに戻すことで重複した要素を取り除くことができます

辞書も集合にすることはできるが出力されるのはキーのみ

set関数で既存のリストから修復した要素を取り除く場合

  • リスト名 = set(リスト名)

まず、リスト「magic」をset関数で整理します

その後リストに戻します

この過程をまとめてきれいに書くと

こうなります
3行になりかなり見やすくなりましたが、後で見返して何をしてるかわからなくなりそうなうちは
まとめずに1工程ずつ書いた方がいいかもしれません

集合の応用

2つの集合を「引き算(ー)」重複している要素を取り除いて出力させることができます

水と光が重複しているので、その2つを取り除いた結果が返ってきました
利点として、結果を返しているだけなのでリストの内容は変更されていないところです
この結果を保持したい場合は、リストに変換するだけです