【Python】複数データの集合体を管理する方法2 『辞書型』

プロモーションが含まれています。

スポンサーリンク
サムネイル Python/MicroPython

前回の記事(複数データの集合体を管理する方法1)では、複数データを[ ]で囲った「リスト型」について書きました。今回は、{ } で囲う「辞書型」についてです。{ } で囲うもので、もうひとつ「集合型(セット型)」がありますが、以降の別記事で書く予定です。

スポンサーリンク

辞書型と関連命令

辞書

リスト型は、数値や文字列の羅列で、それらが何を意味しているのかを知る為には、どんなプログラムなのか全体を把握し流れなどから推測・判断する必要があります。辞書型は「見出し」があり、何のデータなのかを知るヒントになります。「見出し」と「値」の対になった複数データで構成されます。

辞書型とは

dict_name1 (辞書名) = {‘キー(見出し1)’: ‘値1’, ‘name’: ‘Yamada_taro’, ‘sex’: ‘male’ }

ひとつのデータに対して見出しと値、ふたつ持つことができます。ひとつのデータは、説明などの「見出し」(左側)と「値(数値、文字列)」(右側)で構成されています。左側と右側を「:(コロン)」で繋ぎます。左辺に辞書の名前を定義して、右辺に{ }で囲ってリストを作ります。

上の四角で囲った式
0番目のインデックスは、呼びです。1番目のインデックスは「名前(name)」「山田太郎(Yamada_taro)」、2番目は「性別(sex)」「男性(male)」と個人情報を並べることができます。

コンストラクタで作成

dict_name2 (辞書名) = dict( [(見出し2′, 値2), (‘name’, ‘Ito_ai’), (‘sex’, ‘male’) ])

こんな形になるようです。簡単なコードを書いて動作確認だけやります。書いている内容は、{ } で囲う辞書型と一緒です。

コンストラクタで辞書型のオブジェクトを作成することもできますが、少し複雑なので、今はて省略します。(申し訳内ありませんが、理解が浅く上手く説明できません。)

データの表示

データ内容を表示

print(dict_name1)

動作確認へ

キーのみ抽出する

dict_name1.keys()

keylist = list(fried_rice.keys())

辞書型の変数をそのまま使う方法と、一度別の変数に落とし込む方法があります。

動作確認へ

値のみ抽出する

dict_name1.values()

valuelist = list(fried_rice.values())

キーと同じように、変数をそのまま使う方法と、一度別の変数に落とし込む方法があります。

動作確認へ

キーで検索して値を抽出する

pickup_value1 = dict_name1[‘キー’ ]

pickup_value2 = dict_name1(‘キー’ )

指定したキーで検索して、一致したらその値を抽出します。名の通り辞書のような使い方になります。

上段
キーで検索して、一致したところの”値”を変数に入れます。一致するものがない場合は、エラーになります。同じキーがある場合は、最後に一致した値が入ります。

下段
一致するものがないと、none(コードを書いて指定すれば0)が表示されます。同じキーがある場合は、最後に一致した値が入ります。

動作確認へ

辞書に追加・変更・削除

dict_name1[’キー’] =

状況によって、データの追加になる場合と変更になる場合の二通りの処理になります。

追加

作ってある辞書型データの中に、指定した「キー(見出し)」がない場合は、最後尾に追加されます。

動作確認へ

変更

作ってある辞書型データの中に、指定した「キー(見出し)」がある場合は、先頭から参照して出てきた所の値を変更します。

動作確認へ

削除

del dict_name1[’キー’]

delと書いてキーを指定するだけです。データ内の一致するキーは全て削除されます。

動作確認へ

スポンサーリンク

動作確認

中華

簡単なプログラムを書いて、Thonnyで動作確認していきます。

中華料理(チャーハン、麻婆豆腐)の調味料の量をリストにしました。料理の基本「さしすせそ」と中華料理には欠かせない「中華だし(顆粒)」を追加リストにしました。

辞書型

表示させる

fried_rice = {'砂糖':0, '塩':0.5, '酢':0, '醤油':0, '味噌':0, '顆粒中華だし':2 }
mapo_tofu = dict( [('砂糖',0.3 ), ('塩',0), ('酢',0), ('醤油',3), ('味噌',0), ('顆粒中華だし',1)] )

print(fried_rice)
print(mapo_tofu)

>>> {'砂糖': 0, '塩': 0.5, '酢': 0, '醤油': 0, '味噌': 0, '顆粒中華だし': 2}
>>> {'砂糖': 0.3, '塩': 0, '酢': 0, '醤油': 3, '味噌': 0, '顆粒中華だし': 1}

ふたつの型で書いて表示させたとき、どの様な結果になるか確認します。どちらも、{ } で囲われたデータが表示されます。

説明に戻る

キーのみ抽出する

fried_rice = {'砂糖':0, '塩':0.5, '酢':0, '醤油':0, '味噌':0, '顆粒中華だし':2 }

print("キーを表示する その1" )
print(fried_rice.keys())

print("キーを表示する その2" )
recipe_keylist = list(fried_rice.keys())
print(recipe_keylist )

>>> キーを表示する その1
>>> dict_keys(['砂糖', '塩', '酢', '醤油', '味噌', '顆粒中華だし'])
>>> キーを表示する その2
>>> ['砂糖', '塩', '酢', '醤油', '味噌', '顆粒中華だし']

print(fried_rice.keys())で表示させると、dict_keysが表示されます。

説明に戻る

値のみ抽出する

●全値のみを表示する

fried_rice = {'砂糖':0, '塩':0.5, '酢':0, '醤油':0, '味噌':0, '顆粒中華だし':2 }

print("値を表示する その1" )
print(fried_rice.values())

print("値を表示する その2" )
recipe_valuelist = list(fried_rice.values())
print(recipe_valuelist )

>>> 値を表示する その1
>>> dict_values([0, 0.5, 0, 0, 0])
>>> 値を表示する その2
>>> [0, 0.5, 0, 0, 0]

変数をリスト型として使うことができます。

●指定した値を抽出する

fried_rice = {'砂糖':0, '塩':0.5, '酢':0, '醤油':0, '味噌':0, '顆粒中華だし':2 }
no_ppl = 0
recipe_valuelist = list(fried_rice.values())

print("値を抽出" )
salt = recipe_valuelist[1]
c_broth = recipe_valuelist[5] 
print("人数?" )
no_ppl = float(input()) * 0.5
salt = salt * no_ppl
c_broth = c_broth * no_ppl
print("塩:小さじ ", salt  )
print("顆粒中華だし:小さじ ", c_broth )

>>> 値を抽出
>>> 人数?
>>> 6 (キーボードで入力)
>>> 塩:小さじ  1.5
>>> 顆粒中華だし:小さじ  6.0

リストの数値を利用して、人数に合わせて必要な調味料の量を算出します。リストの分量は2人前の量なので、リストの量を0.5倍して1人前の量で計算しています。

fried_rice = {'砂糖':0, '塩':0.5, '酢':0, '醤油':0, '味噌':0, '顆粒中華だし':2 }
recipe_keylist = list(fried_rice.keys())
fried_rice_key = recipe_key[1]
print(fried_rice_key)

>>> 塩

キーも単体で抽出できるので、プログラムの組み方次第で料理と調味料のリストを作成するだけで、色々なメニューに合わせた調味料の量を表示することも可能です。

説明に戻る

キーで検索して値を抽出する

a_dict = {"a": 1, "b": 2, "c": 3}

pickup1_a_dict = a_dict["a" ]
print(pickup1_a_dict )

pickup11_a_dict = a_dict.get("b" )
print(pickup11_a_dict )

pickup12_a_dict = a_dict.get("d" )
print(pickup12_a_dict )

>>> 1
>>> 2
>>> none

a_dict[ ]で検索してデータ内に一致するキーがない場合はエラーになりますが、a_dict.get(“d” )で不一致の場合は、変数に「none」が入力されます。a_dict.get(“d”, 0 )とすると「none」の代わりに「0」が入力されます。

説明に戻る

データの追加

a_dict = {"a": 1, "b": 2, "c": 3 }

a_dict["d"] = 4

print(a_dict)

>>> {'a': 1, 'b': 2, 'c': 3, 'd': 4 }

リスト内のキーにない場合は、末尾に追加されています。

説明に戻る

値の変更

a_dict = {"a": 1, "b": 2, "c": 3 }

a_dict["a"] = 4

print(a_dict)

>>> {'a': 4, 'b': 2, 'c': 3 }

リスト内のキーにある場合は、データを変更します。aの値が1から4に変わっていることが分かります。

説明に戻る

データの削除

b_dict = {"a": 1, "b": 2, "c": 3, "a": 4}

del b_dict["a"]

print(b_dict)

>>> {'b': 2, 'c': 3}

インデックス0番目と4番目が”a”なので削除されています。辞書型と言われているくらいなので、ひとつのリスト内に完全一致の見出しが複数存在すること自体がおかしいのかもしれません。

説明に戻る

コメント

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