【Python初心者】辞書【リスキリング】

Programming
スポンサーリンク

 

Pythonを勉強するために本を買ったけど,積読してる.
最初の方の数値や算術演算,文字列の扱いで止まっている.
似たデータ型でリストやタプルとの違いは何?
できる操作は違うの?

 そんな方が,辞書を理解して,集合の学習に進むための記事です.
 

本記事の内容

 

  前々回の「リスト」,前回の「タプル」に続き,複合データ型を解説しています.今回は,「辞書」です.まずは辞書の作成とデータ(個々の要素)の確認,変換,取得方法を,その後要素の変更方法などを解説します.これまでの記事と同様に,コードを打ちながら学んで行きましょう.余力のある方は,部分的にコードを変更して実験してみましょう.

スポンサーリンク

辞書とは|作成方法

 個々の値と一意なkeyの組を保存するデータ型です.言い換えると,あるデータに対応する関連データをまとめたオブジェクトです.表1に示すように,ミュータブルに○(後述するように,valueのみ変更可能),シーケンスに×をつけています.要素の順序が管理されていないので,オフセットを使いません.その代わりに,要素を取得する際は,keyを使います.
 

表1.複合データ型

型(クラス) ミュータブル シーケンス型
リスト(lis
タプル(tuple) ×
辞書(dict) ×
集合(set) ×

 

 辞書を使う場面としては,単語帳,周期表,商品名と価格,何らかのファイルのヘッダーの情報など,あるデータに対応する関連データを組み合わせたデータとして扱う場面です.まずは,辞書の作成方法を学びながら,実行結果がどのように表示されるかをみてみましょう.同時に,入力ルールの理解を深めましょう.
 

 

辞書の作成

 keyとvalueの間を:(コロン)で対応させます.そして,key:valueのペアをカンマで区切って並べ,{}(波括弧)で囲んで記述します.リストやタプルと同様に,変数に代入して,長いデータを短いコードで表現できます.
 辞書は,keyでインデックス化されており,keyは変更不可な型となります.したがって,keyとしては,文字列・数値・タプルなどの変更不可のデータを指定できますが,リスト・辞書などの変更可能なデータを指定できません.一方,valueとしては、変更の可否にかかわらずあらゆるデータを指定できます.

辞書名 = {key1: value1, key2: value2, key3: value3・・・}

 

key:valueのペアをカンマで区切り,{}(波括弧)で囲んで記述する.

{"one": 1, "two": 2, "three": 3, "four": 4, "five": 5}
{‘one’: 1, ‘two’: 2, ‘three’: 3, ‘four’: 4, ‘five’: 5}

 

{"さ": "砂糖", "し": "塩", "す": "酢", "せ": "醤油", "そ": "味噌"}
{‘さ’: ‘砂糖’, ‘し’: ‘塩’, ‘す’: ‘酢’, ‘せ’: ‘醤油’, ‘そ’: ‘味噌’}

 

dict()関数を用いて作成する.

dict(one=1, two=2, three=3, four=4, five=5)
{‘one’: 1, ‘two’: 2, ‘three’: 3, ‘four’: 4, ‘five’: 5}

 

dict(さ="砂糖", し="塩", す="酢", せ="醤油", そ="味噌")
{‘さ’: ‘砂糖’, ‘し’: ‘塩’, ‘す’: ‘酢’, ‘せ’: ‘醤油’, ‘そ’: ‘味噌’}

 

 ただし,dict()関数を使用する場合,引数が変数としてのルールに則っている必要があります.例えば,変数は先頭に数字を置くことができないので,keyを数値にするとエラーが生じます.

dict(1="one", 2="two", 3="three", 4="four", 5="five")
File ““, line 1
dict(1=”one”, 2=”two”, 3=”three”, 4=”four”, 5=”five”)
^
SyntaxError: expression cannot contain assignment, perhaps you meant “==”?

 

 変数のルールについては,こちらの記事をご覧ください.

【Python初心者】変数【リスキリング】
Pythonを勉強するために本を買ったけど,積読,挫折していませんか?変数について,その概念から分かりやすく解説しています.Pythonを学びたい方,学び直したい方,より深く学びたい方は,ぜひご一読ください.

 

 

変数に代入できる.

dict_ex1_1 = {"one": 1, "two": 2, "three": 3, "four":4, "five": 5}
dict_ex1_1
{‘one’: 1, ‘two’: 2, ‘three’: 3, ‘four’: 4, ‘five’: 5}

 

dict_ex1_2 = dict(one=1, two=2, three=3, four=4, five=5)
dict_ex1_2
{‘one’: 1, ‘two’: 2, ‘three’: 3, ‘four’: 4, ‘five’: 5}

 

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
{(2, 3, 5, 7, 11, 13, 17, 19, 23): ‘prime number’, ‘pi’: ‘π’, “Euler’s number”: 2.71828, ‘imaginary unit’: 1j}

 

dict_ex5 = {1: "水素", 2: "ヘリウム"}
dict_ex5
{1: ‘水素’, 2: ‘ヘリウム’}

 

keyは重複しない.

dict_ex6 = {"さ": "砂糖", "さ": "酒", "し": "塩", "す": "酢", "せ": "醤油", "そ": "味噌"}  # key"さ"は,最後の要素である"さ": "酒"が要素となる.
dict_ex6
{‘さ’: ‘酒’, ‘し’: ‘塩’, ‘す’: ‘酢’, ‘せ’: ‘醤油’, ‘そ’: ‘味噌’}

 

辞書を入れ子できる.(valueに対してのみ)

dict_ex7 = {"さ": {"さ1": "砂糖", "さ2": "酒", "さ3": "みりん"}, "し": "塩", "す": "酢", "せ": "醤油", "そ": "味噌"}
dict_ex7
{‘さ’: {‘さ1’: ‘砂糖’, ‘さ2’: ‘酒’, ‘さ3’: ‘みりん’},
‘し’: ‘塩’,
‘す’: ‘酢’,
‘せ’: ‘醤油’,
‘そ’: ‘味噌’}

 

何も記述しない場合,空辞書となる.

dict_empty1={}
dict_empty
{}

 

dict_empty2 = dict() # dict()関数で記述して空辞書を出力できる.
{}

 

まとめ

  • key:valueのペアをカンマで区切り,波括弧で囲んで記述する.
  • dict()関数を用いて作成する.
  • 変数に代入できる.
  • 異なる型が混在しても良い.
  • keyは重複しない.
  • 辞書を入れ子できる.(valueに対してのみ)
  • 何も記述しない場合,空辞書となる.

 

 

辞書のデータ型の確認

 type()関数を使って確認します.「dict」と表示されるか確認してみましょう.

type({1: '水素', 2: 'ヘリウム'})
dict

 

type(dict_ex4)
dict

 

 

辞書へのデータ型の変換

 dict()関数を使って,2つの値を含むシーケンスを辞書に変換できます.各値の第1要素がkey,第2要素がvalueに変換されます.

文字列のリストを辞書に変換

 2文字の文字列を要素とするリストから辞書に変換できます.文字列シーケンスの1文字目がkey,2文字目がvalueとして,辞書に変換されます.

list_str = ["水1", "ヘ2", "リ3"]
dict(list_str)
{‘水’: ‘1’, ‘ヘ’: ‘2’, ‘リ’: ‘3’}

 

文字列のタプルを辞書に変換

 2文字の文字列を要素とするタプルから辞書に変換できます.

tuple_str = ("水1", "ヘ2", "リ3")
dict(tuple_str)
{‘水’: ‘1’, ‘ヘ’: ‘2’, ‘リ’: ‘3’}

 

タプルのリストを辞書に変換

 2つの要素のタプルを要素とするリストから辞書に変換できます.

list_tuple = [("水素", 1), ("ヘリウム", 2), ("リチウム", 3)]
dict(taple_list)
{‘水素’: 1, ‘ヘリウム’: 2, ‘リチウム’: 3}

 

リストのタプルを辞書に変換

 2つの要素のリストを要素とするタプルから辞書に変換できます.

tuple_list =  (["水素", 1], ["ヘリウム", 2], ["リチウム", 3])
dict(tuple_list)
{‘水素’: 1, ‘ヘリウム’: 2, ‘リチウム’: 3}

 

 

要素の取得(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
{‘水素’: ‘H’, ‘ヘリウム’: ‘He’, ‘リチウム’: ‘Li’, ‘ベリリウム’: ‘Be’, ‘ホウ素’: ‘B’, ‘炭素’: ‘C’, ‘窒素’: ‘N’, ‘酸素’: ‘O’}

 

 同じkeyを持っている場合,後から連結した方のkeyとvalueが残ります.

element3 = {'炭素': 'C13'}
element1.update(element3) #  element1は上のコードで,辞書が追加された後の配列
element1
{‘水素’: ‘H’, ‘ヘリウム’: ‘He’, ‘リチウム’: ‘Li’, ‘ベリリウム’: ‘Be’, ‘ホウ素’: ‘B’, ‘炭素’: ‘C13’, ‘窒素’: ‘N’, ‘酸素’: ‘O’}

 

**演算子

element1 = {"水素": "H", "ヘリウム": "He", "リチウム": "Li"}
element2 = {'ベリリウム': 'Be', 'ホウ素': 'B', '炭素': 'C',  '窒素': 'N',  '酸素': 'O'}
{**element1, **element2}
{‘水素’: ‘H’, ‘ヘリウム’: ‘He’, ‘リチウム’: ‘Li’, ‘ベリリウム’: ‘Be’, ‘ホウ素’: ‘B’, ‘炭素’: ‘C’, ‘窒素’: ‘N’, ‘酸素’: ‘O’}

 

 

要素の追加

.setdefault()メソッド → keyとvalueを追加する.

element1 = {"水素": "H", "ヘリウム": "He", "リチウム": "Li"}
element1.setdefault("ベリリウム", "Be") # 第1引数に追加したいkey, 第2引数に対応するvalueを入力する.
element1
{‘水素’: ‘H’, ‘ヘリウム’: ‘He’, ‘リチウム’: ‘Li’, ‘ベリリウム’: ‘Be’}

 

辞書[追加したいvalueのペアとなるkey] = 追加したいvalue

element1 = {"水素": "H", "ヘリウム": "He", "リチウム": "Li"}
element1["ベリリウム"] = "Be"
element1
{‘水素’: ‘H’, ‘ヘリウム’: ‘He’, ‘リチウム’: ‘Li’, ‘ベリリウム’: ‘Be’}

 

 

要素の置換

 辞書の中に同じ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を出力する.
{‘family’: ‘1wife & 2children’, ‘health’: ‘stable’, ‘hobby’: ‘travel’, ‘money’: 100000000}

 

del文→ keyを指定してその要素を削除する.

life = {"family": "1wife & 2children", "health": "stable", "hobby": "travel",  "money": 100000000, "work": "stress"}
del life["work"] 
life
{‘family’: ‘1wife & 2children’, ‘health’: ‘stable’, ‘hobby’: ‘travel’, ‘money’: 100000000}

 

 

要素の検索

len()関数 → key/valueのペアの数(要素数)を調べる.

len(life)
4

 

in → keyの有無を調べる.
 Trueと返ってきたら,要素が有り,Falseと返ってきたら要素は無いという判定です.TrueとFalse(論理値)のことを詳しく説明していないので,ここでは有無(真偽)をこのように確認するんだなくらいの理解で結構です.

"family" in life
True

 

"work" in life
False

 

 

要素の取得

keys()メソッド → 辞書の全てのキーを取得する.

{"さ":"砂糖", "し":"塩", "す":"酢", "せ":"醤油", "そ":"味噌"}.keys()
dict_keys([‘さ’, ‘し’, ‘す’, ‘せ’, ‘そ’])

 

dict_ex2_1.keys()
dict_keys([‘さ’, ‘し’, ‘す’, ‘せ’, ‘そ’])

 

 リストのような形式で返ってきましたが,listとして返すためには,list()関数を使って,listに変換します.

list(dict_ex2_1.keys())
[‘さ’, ‘し’, ‘す’, ‘せ’, ‘そ’]

 

.items()メソッド → 全てのkey/valueのペアを取得する.
 key/valueのペアは,タプルで返されます.

dict_ex2_1.items()
dict_items([(‘さ’, ‘砂糖’), (‘し’, ‘塩’), (‘す’, ‘酢’), (‘せ’, ‘醤油’), (‘そ’, ‘味噌’)])

 

 keys()メソッドと同様に,リストのような形式で帰ってきました.同様にlist()関数を呼び出します.

list(dict_ex2_1.items())
[(‘さ’, ‘砂糖’), (‘し’, ‘塩’), (‘す’, ‘酢’), (‘せ’, ‘醤油’), (‘そ’, ‘味噌’)]

 

.get()メソッド → keyを指定して,対応するvalueを取得.

dict_ex2_1.get("し")
‘塩’

 

.values()メソッド → 全てのvalueを取得する.

dict_ex2_1.value()
dict_values([‘砂糖’, ‘塩’, ‘酢’, ‘醤油’, ‘味噌’])

 

 keys()メソッド,items()メソッドと同様に,リストのような形式で返ってきました.同様にlist()関数を呼び出します.

list(dict_ex2_1.values())
[‘砂糖’, ‘塩’, ‘酢’, ‘醤油’, ‘味噌’]

 

辞書[取得したいvalueのペアとなるkey]

dict_ex2_1["し"]
‘塩’

 

辞書について,基本を学べましたでしょうか?
次は「集合」について学びましょう!

【Python初心者】集合【リスキリング】
Pythonを勉強するために本を買ったけど,積読,挫折していませんか?集合の操作について,基本から分かりやすく解説しています.Pythonを学びたい方、学び直したい方、より深く学びたい方は,ぜひご一読ください.

最後まで読んでくださり,ありがとうございます☺️
 

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