Pythonを勉強するために本を買ったけど,積読してる.
最初の方の数値や算術演算,文字列の扱いで止まっている.
似たデータ型でリストやタプルとの違いは何?
できる操作は違うの?
そんな方が,辞書を理解して,集合の学習に進むための記事です.
本記事の内容
前々回の「リスト」,前回の「タプル」に続き,複合データ型を解説しています.今回は,「辞書」です.まずは辞書の作成とデータ(個々の要素)の確認,変換,取得方法を,その後要素の変更方法などを解説します.これまでの記事と同様に,コードを打ちながら学んで行きましょう.余力のある方は,部分的にコードを変更して実験してみましょう.
辞書とは|作成方法
個々の値と一意なkeyの組を保存するデータ型です.言い換えると,あるデータに対応する関連データをまとめたオブジェクトです.表1に示すように,ミュータブルに○(後述するように,valueのみ変更可能),シーケンスに×をつけています.要素の順序が管理されていないので,オフセットを使いません.その代わりに,要素を取得する際は,keyを使います.
表1.複合データ型
型(クラス) | ミュータブル | シーケンス型 |
---|---|---|
リスト(lis | ○ | ○ |
タプル(tuple) | × | ○ |
辞書(dict) | ○ | × |
集合(set) | ○ | × |
辞書を使う場面としては,単語帳,周期表,商品名と価格,何らかのファイルのヘッダーの情報など,あるデータに対応する関連データを組み合わせたデータとして扱う場面です.まずは,辞書の作成方法を学びながら,実行結果がどのように表示されるかをみてみましょう.同時に,入力ルールの理解を深めましょう.
辞書の作成
keyとvalueの間を:(コロン)で対応させます.そして,key:valueのペアをカンマで区切って並べ,{}(波括弧)で囲んで記述します.リストやタプルと同様に,変数に代入して,長いデータを短いコードで表現できます.
辞書は,keyでインデックス化されており,keyは変更不可な型となります.したがって,keyとしては,文字列・数値・タプルなどの変更不可のデータを指定できますが,リスト・辞書などの変更可能なデータを指定できません.一方,valueとしては、変更の可否にかかわらずあらゆるデータを指定できます.
key:valueのペアをカンマで区切り,{}(波括弧)で囲んで記述する.
{"one": 1, "two": 2, "three": 3, "four": 4, "five": 5}
{"さ": "砂糖", "し": "塩", "す": "酢", "せ": "醤油", "そ": "味噌"}
dict()関数を用いて作成する.
dict(one=1, two=2, three=3, four=4, five=5)
dict(さ="砂糖", し="塩", す="酢", せ="醤油", そ="味噌")
ただし,dict()関数を使用する場合,引数が変数としてのルールに則っている必要があります.例えば,変数は先頭に数字を置くことができないので,keyを数値にするとエラーが生じます.
dict(1="one", 2="two", 3="three", 4="four", 5="five")
dict(1=”one”, 2=”two”, 3=”three”, 4=”four”, 5=”five”)
^
SyntaxError: expression cannot contain assignment, perhaps you meant “==”?
変数のルールについては,こちらの記事をご覧ください.
変数に代入できる.
dict_ex1_1 = {"one": 1, "two": 2, "three": 3, "four":4, "five": 5} dict_ex1_1
dict_ex1_2 = dict(one=1, two=2, three=3, four=4, five=5) dict_ex1_2
dict_ex2_1 = {"さ": "砂糖", "し": "塩", "す": "酢", "せ": "醤油", "そ": "味噌"} dict_ex2_1
dict_ex2_2 = dict(さ="砂糖", し="塩", す="酢", せ="醤油", そ="味噌") dict_ex2_2
異なる型が混在しても良い.
dict_ex3 = {"さ": ["砂糖", "酒", "みりん"], "し": "塩", "す": "酢", "せ": "醤油", "そ": "味噌"} dict_ex3
dict_ex4 = {(2, 3, 5, 7, 11, 13, 17, 19, 23): "prime number", "pi": "π", "Euler's number": 2.71828, "imaginary unit": 0+1j} dict_ex4
dict_ex5 = {1: "水素", 2: "ヘリウム"} dict_ex5
keyは重複しない.
dict_ex6 = {"さ": "砂糖", "さ": "酒", "し": "塩", "す": "酢", "せ": "醤油", "そ": "味噌"} # key"さ"は,最後の要素である"さ": "酒"が要素となる. dict_ex6
辞書を入れ子できる.(valueに対してのみ)
dict_ex7 = {"さ": {"さ1": "砂糖", "さ2": "酒", "さ3": "みりん"}, "し": "塩", "す": "酢", "せ": "醤油", "そ": "味噌"} dict_ex7
‘し’: ‘塩’,
‘す’: ‘酢’,
‘せ’: ‘醤油’,
‘そ’: ‘味噌’}
何も記述しない場合,空辞書となる.
dict_empty1={} dict_empty
dict_empty2 = dict() # dict()関数で記述して空辞書を出力できる.
まとめ
- key:valueのペアをカンマで区切り,波括弧で囲んで記述する.
- dict()関数を用いて作成する.
- 変数に代入できる.
- 異なる型が混在しても良い.
- keyは重複しない.
- 辞書を入れ子できる.(valueに対してのみ)
- 何も記述しない場合,空辞書となる.
辞書のデータ型の確認
type()関数を使って確認します.「dict」と表示されるか確認してみましょう.
type({1: '水素', 2: 'ヘリウム'})
type(dict_ex4)
辞書へのデータ型の変換
dict()関数を使って,2つの値を含むシーケンスを辞書に変換できます.各値の第1要素がkey,第2要素がvalueに変換されます.
文字列のリストを辞書に変換
2文字の文字列を要素とするリストから辞書に変換できます.文字列シーケンスの1文字目がkey,2文字目がvalueとして,辞書に変換されます.
list_str = ["水1", "ヘ2", "リ3"] dict(list_str)
文字列のタプルを辞書に変換
2文字の文字列を要素とするタプルから辞書に変換できます.
tuple_str = ("水1", "ヘ2", "リ3") dict(tuple_str)
タプルのリストを辞書に変換
2つの要素のタプルを要素とするリストから辞書に変換できます.
list_tuple = [("水素", 1), ("ヘリウム", 2), ("リチウム", 3)] dict(taple_list)
リストのタプルを辞書に変換
2つの要素のリストを要素とするタプルから辞書に変換できます.
tuple_list = (["水素", 1], ["ヘリウム", 2], ["リチウム", 3]) dict(tuple_list)
要素の取得(keyを用いて)
冒頭と表1で説明したように,文字列,リスト,タプルと異なり,辞書には順序がないので,インデックスがありません.その代わりに,要素を取得する際は,keyを使います.
辞書の後ろに角カッコ(ブラケット)[ ]を付して,その中に取り出したいvalueに対応するkeyを入力して実行します.
{"さ": "砂糖", "し": "塩", "す": "酢", "せ": "醤油", "そ": "味噌"}["す"]
dict_ex2_1["す"]
メソッドによる取得方法については,辞書の操作で解説します.
辞書の操作
表2.辞書の操作一覧
操作 | 関数・メソッド | 演算子ほか | key |
---|---|---|---|
連結 | .update() | ** | |
追加 | .setdefault() | ◯ | |
置換 | ◯ | ||
削除 | .clear(), .pop() | del文 | |
検索・取得 | .count(), .get(), .items(), .keys(), .values(), len() | in | ◯ |
辞書の連結
.update()メソッド→ 別の辞書を連結する.
element1 = {"水素": "H", "ヘリウム": "He", "リチウム": "Li"} element2 = {"ベリリウム": "Be", "ホウ素": "B", "炭素": "C", "窒素": "N", "酸素": "O"} element1.update(element2) # element1の末尾に,element2が連結する. element1
同じkeyを持っている場合,後から連結した方のkeyとvalueが残ります.
element3 = {'炭素': 'C13'} element1.update(element3) # element1は上のコードで,辞書が追加された後の配列 element1
**演算子
element1 = {"水素": "H", "ヘリウム": "He", "リチウム": "Li"} element2 = {'ベリリウム': 'Be', 'ホウ素': 'B', '炭素': 'C', '窒素': 'N', '酸素': 'O'} {**element1, **element2}
要素の追加
.setdefault()メソッド → keyとvalueを追加する.
element1 = {"水素": "H", "ヘリウム": "He", "リチウム": "Li"} element1.setdefault("ベリリウム", "Be") # 第1引数に追加したいkey, 第2引数に対応するvalueを入力する. element1
辞書[追加したいvalueのペアとなるkey] = 追加したいvalue
element1 = {"水素": "H", "ヘリウム": "He", "リチウム": "Li"} element1["ベリリウム"] = "Be" element1
要素の置換
辞書の中に同じkeyがすでに存在する場合,既存のvalueが置き換えられます.keyは一意でなければならないので,同じkeyを使うと,最後に追加したvalueとの組み合わせが残ります.
辞書[置換したいkey] = 置換したいvalue
seasoning = {"さ":"砂糖", "し":"塩", "す":"酢", "せ":"醤油", "そ":"味噌"} seasoning["さ"] = ["砂糖", "酒", "みりん"] seasoning
要素の削除
.clear()メソッド → 全ての要素を削除する.
unneed = {"hard working": "over time", "deadline": "1 month", "tax": "20%"} unneed.clear() unneed
.pop()メソッド → keyを指定してその要素を削除する.
life = {"family": "1wife & 2children", "health": "stable", "hobby": "travel", "money": 100000000, "work": "pressure"} life.pop("work") # "work"が指定される. life # "work"を取り出して削除したlifeを出力する.
del文→ keyを指定してその要素を削除する.
life = {"family": "1wife & 2children", "health": "stable", "hobby": "travel", "money": 100000000, "work": "stress"} del life["work"] life
要素の検索
len()関数 → key/valueのペアの数(要素数)を調べる.
len(life)
in → keyの有無を調べる.
Trueと返ってきたら,要素が有り,Falseと返ってきたら要素は無いという判定です.TrueとFalse(論理値)のことを詳しく説明していないので,ここでは有無(真偽)をこのように確認するんだなくらいの理解で結構です.
"family" in life
"work" in life
要素の取得
keys()メソッド → 辞書の全てのキーを取得する.
{"さ":"砂糖", "し":"塩", "す":"酢", "せ":"醤油", "そ":"味噌"}.keys()
dict_ex2_1.keys()
リストのような形式で返ってきましたが,listとして返すためには,list()関数を使って,listに変換します.
list(dict_ex2_1.keys())
.items()メソッド → 全てのkey/valueのペアを取得する.
key/valueのペアは,タプルで返されます.
dict_ex2_1.items()
keys()メソッドと同様に,リストのような形式で帰ってきました.同様にlist()関数を呼び出します.
list(dict_ex2_1.items())
.get()メソッド → keyを指定して,対応するvalueを取得.
dict_ex2_1.get("し")
.values()メソッド → 全てのvalueを取得する.
dict_ex2_1.value()
keys()メソッド,items()メソッドと同様に,リストのような形式で返ってきました.同様にlist()関数を呼び出します.
list(dict_ex2_1.values())
辞書[取得したいvalueのペアとなるkey]
dict_ex2_1["し"]
辞書について,基本を学べましたでしょうか?
次は「集合」について学びましょう!
最後まで読んでくださり,ありがとうございます☺️