【Python】ディショナリ型の操作、検索方法を全紹介!!

【Python】ディショナリ型の操作、検索方法を全紹介!!

Pythonにはディクショナリ型(辞書型)という特殊な型が存在します。
特にC言語を学んでからPythonを学んでいる人にとっては初めて見る型なはずです。

この記事ではそんな辞書型についての説明に加え作成、削除、追加、上書き、参照、全取得、検索…とこれでもか!というくらい操作方法を紹介しています。

一気に全部の操作を知る必要は無いので今自分が知りたい部分だけを参考にして、その他は必要になったらまた参考にしてください。
どの場所から見てもわかりやすいように各項目に操作実行前の辞書変数を記載しています。
実行することでどのように辞書変数が変化しているか確認してみてください。

この記事での目標
・辞書型とは何かを理解する

・自分の行いたい辞書型操作を探して実行できる

その他Pythonの記事は以下にまとめています!!
Python記事まとめ

[スポンサーリンク]


辞書型とは?

辞書型は配列やリストのように複数の要素を1つの変数で管理する型です。
しかし配列やリストとは違い、それぞれの要素にkeyとvalueというデータが1セットになっています。

文字で説明されてもあんましピンとこないと思うので実際に見てみましょう!

#辞書型作成
dic={"1月":1, "2月":2, "3月":3}
print(dic)
#print表示
#{"1月":1, "2月":2, "3月":3}

{ }の中に「”1月” : 10」のように:で区切られた文字列や数値がそれぞれ4つずつありますよね。
これが辞書型での1要素です!
の右側がkey、左がvalueと言います。

この辞書型何が便利かというとkeyでvalueをワンセットで管理できることです!
例えばクラスのみんなが何月生まれかアンケートを実施してその結果をまとめるとしましょう!
もしリストでまとめるとこんな感じになりますよね(めんどうなので4か月分だけ)

l=[10,20,30,15]
print(l)
#print表示
#[10, 20, 30, 15]

パット見この4か月分が何月の数値なのかわかりませんよね?
これでは1月に10人足したいなーという時に間違えて2月に足すようなミスが発生する可能性があります。
(もちろんC言語でいうdefine定義をすればミスは防げますが、一々宣言するのは面倒…)

では辞書型にするとどうでしょう?

d={"1月":10, "2月":20, "3月":30,"4月":15}
print(d)
#print表示
#{'1月': 10, '2月': 20, '3月': 30, '4月': 15}

1月が10人、2月が20人というようにどの数値がどの月のことを示すかがはっきりとわかりやすいです!
例えば1月を+10人することになった時は1月と指定して数値を足すことができます(操作は後程説明)
これなら間違えて他の月に足すようなミスはしませんよね!

d["1月"]+=10
print(d)
#print表示
#{'1月': 20, '2月': 20, '3月': 30, '4月': 15}

このように分類をして数値や文字を管理する時にとっても便利なのが辞書型です!

 

辞書を作成

辞書の作成方法は実にシンプル!
以下のように{ }内でkey:valueを記載するだけです!

変数名 = {key:value, key2:value2…}

例と一緒ですけど実際に書いてみるとこんな感じ

dic = {"1月":1, "2月":2, "3月":3}
print(dic)
#print表示
#{"1月":1, "2月":2, "3月":3}

きちんと1月~3月までのkeyvalueがあることを確認できました。

 

リストから辞書を作成

リストから辞書を作成する方法です。
おそらく辞書作成する時はリストからが多いでしょう!
作成方法は簡単でzipdictを使用するだけです。

dict(zip(key,value))

では実際にそれぞれのリストにkeyvalueを格納して辞書を作成してみましょう!

key = ["1月","2月","3月"]
value = [1,2,3]
#辞書型を作成
dic_list = dict(zip(key,value))
print(dic_list)

#print表示
#{'1月': 1, '2月': 2, '3月': 3}

dictzipを用いて辞書が作成できました!

 

要素を参照

特定のkeyvalueを参照したい!という時の方法を紹介します。
参照は以下のように記載すればOKです!

辞書名[key]

実際に以下の変数から“1月”valueを取得してみます!

参照する変数

dic = {"1月":1, "2月":2, "3月":3}
print(dic)
#print表示
#{"1月":1, "2月":2, "3月":3}

参照結果

print(dic["1月"])
#print表示
#1

1月のvalueである1が取得できました!

 

[補足]エラーを回避して参照

参照する時にkeyが存在していない場合は以下のようにエラーが発生します。

print(dic["5月"])

Traceback (most recent call last):
    File "<ipython-input-21-e9efb2a346d0>", line 1, in <module>
        print(dic["5月"])
KeyError: '5月'

参照する時にkeyが存在してなくてもエラーを発生させたくない!!という時に便利なのがgetメソッドです。
getメソッドを使用すると参照keyが存在しない場合エラーではなくNoneが返ります。

記載方法は以下の通り

辞書名.get(key)

では実際に存在しないkeyを参照してみましょう!

print(dic.get("5月"))
#print表示
#None

Noneが返りました。
もちろん存在しているkeyの場合は普通にvalueが返ります。

print(dic.get("1月")) 
#print表示 
#1

 

要素の上書き

すでに辞書型の変数が存在しているとしてvalueを変更したい!という時の紹介です。
変更方法は以下のように記述するだけ

辞書名[key] = value

では実際に以下の変数の1月value100に変更してみましょう!

実行前

dic = {"1月":1, "2月":2, "3月":3}
print(dic)
#print表示
#{"1月":1, "2月":2, "3月":3}

実行後

dic["1月"] = 100
print(dic)
#print表示
#{'1月': 100, '2月': 2, '3月': 3}

1月のvalueが1から100に変更できました!

 

要素を追加

すでに作成されている辞書に要素を追加する方法です!
記載方法は以下の通りなんですけど実は上書き方法と同じです。

辞書名[key] = value

指定しているkeyが存在していたら上書き、無かったら追加される仕組みなんです。

では存在しないkey4月value4で追加してみましょう!

実行前

dic = {"1月":1, "2月":2, "3月":3}
print(dic)
#print表示
#{"1月":1, "2月":2, "3月":3}

実行後

dic["4月"] = 4
print(dic)
#print表示
#{'1月': 1, '2月': 2, '3月': 3, '4月': 4}

はい!4月というkeyと4というval

ueが追加されました。

 

要素を削除

次は要素を削除する方法です。
削除にはdelを使用します!
記載方法は以下の通り

del 辞書名[key]

では以下の変数から1月を削除してみましょう!

実行前

dic = {"1月":1, "2月":2, "3月":3}
print(dic)
#print表示
#{"1月":1, "2月":2, "3月":3}

実行後

del dic["1月"]
print(dic)
#print表示
#{'2月': 2, '3月': 3}

実際に1月が削除されました!

[スポンサーリンク]


全keyを取得

すでに存在している辞書からkeyのみを取得する方法です。
取得方法は辞書名にkeys()を付けるだけ!

辞書名.keys()

では実際に取得してみましょう!

対象変数

dic = {"1月":1, "2月":2, "3月":3}
print(dic)
#print表示
#{"1月":1, "2月":2, "3月":3}dic = {"1月":1, "2月":2, "3月":3}

print(dic)
#print表示
#{"1月":1, "2月":2, "3月":3}

取得実行

print(dic.keys())
#print表示
#dict_keys(['1月', '2月', '3月'])

#リストで取り出す場合
print(list(dic.keys())

#print表示
#['1月', '2月', '3月']

keyである1月~3月が取り出せました!
そのまま取り出すと操作しにくい形になっているので、リストで取り出す方がおすすめです。

 

全valueの取得

すでに存在している辞書からvalueのみを取得する方法です。
取得方法は辞書名にvalues()を付けるだけ!

辞書名.values()

実際に取得してみます!

対象変数

dic = {"1月":1, "2月":2, "3月":3}
print(dic)
#print表示
#{"1月":1, "2月":2, "3月":3}

取得実行

print(dic.values())
#print表示
#dict_values([1, 2, 3])

#リストで受け取る場合
print(list(dict.values()))

#print表示
#[1, 2, 3]

valueである1~3が取り出せました!
そのまま取り出すと操作しにくい形になっているので、リストで取り出す方がおすすめです。

 

全要素の取り出し

すでに存在している辞書から各要素を取得する方法です。
取得方法は辞書名にitems()を付けるだけ!

辞書名.items()

では実際に取り出します!

対象変数

dic = {"1月":1, "2月":2, "3月":3}
print(dic)
#print表示
#{"1月":1, "2月":2, "3月":3}

取得実行

print(dic.items())
#print表示
#dict_items([('1月', 1), ('2月', 2), ('3月', 3)])

#リストで受け取る場合
print(list(dic.items()))
#print表示
#[('1月', 1), ('2月', 2), ('3月', 3)]

それぞれの要素が取り出せました!
ちなみに要素は( )で表示されていることからわかるようにタプル型となっています。

 

特定のkeyを検索

辞書型において特定のkeyを検索する方法です。
存在している場合の検索にはin
存在していない場合の検索はnot inを使用します!

検索変数

dic = {"1月":1, "2月":2, "3月":3}
print(dic)
#print表示
#{"1月":1, "2月":2, "3月":3}

検索実行

#存在している場合
print("1月" in dic)
#print表示
#True

#存在していない場合
print("5月" in dic)
#print表示
#False

#not検索の場合
print("5月" not in dic)
#print表示
#True

上から1月は存在しているのでTrue、5月は存在していないのでFalse、5月のnot inTrueということで正しく判断されました。

 

特定のvalueを検索

辞書型において特定のvalueを検索する方法です。
存在している場合の検索にはin
存在していない場合の検索はnot inを使用します!

検索変数

dic = {"1月":1, "2月":2, "3月":3}
print(dic)
#print表示
#{"1月":1, "2月":2, "3月":3}

検索実行

#存在している場合
print(1 in dic.values())
#print表示
#True

#存在しない場合
print(20 in dic.values())
#print表示
#False

#not検索の場合
print(20 not in dic.values())
#print表示
#True

上から1は存在しているのでTrue、20は存在していないのでFalse、20のnot inTrueということで正しく判断されました。

 

特定のkeyとvalueを検索

辞書型において特定のvalueと特定のkeyをセットで検索する方法です。
存在している場合の検索にはin
存在していない場合の検索はnot inを使用します!

検索変数

dic = {"1月":1, "2月":2, "3月":3}
print(dic)
#print表示
#{"1月":1, "2月":2, "3月":3}

検索実行

#存在する場合
print(("1月",1) in dic.items())
#print表示
#True

#存在しない場合
print(("1月",20) in dic.items())
#print表示
#False

#not検索の場合
print(("1月",20) not in dic.items())
#print表示
#True

上から(1月,1)は存在しているのでTrue、(1月,20)は存在していないのでFalse、(1月,20)のnot inTrueということで正しく判断されました。

[スポンサーリンク]


基礎知識カテゴリの最新記事