Pythonの辞書(dict)について詳しく解説

Pythonの辞書 Python

Pythonには辞書というデータ型があります。この辞書はdict型オブジェクトと言われることもあります。

定義としてはkey(キー)とvalue(値)がセットになっているリストのようなイメージです。ただ、リストのように、各要素に順番がないのが特徴です。

辞書型オブジェクトの書式

辞書型の一般的な書式は次のようになります。

【書式】

{key1:value1,key2:value2,key3:value3}

{}の中にkeyとvalueを対応させて書いて行きます。
それぞれのKeyとvalueは、ダブルコロンで繋がれ、カンマで区切られています。

keyとvalueはそれぞれ対応しており、上記だと、key1に対してvalue1が、key2に対してvalue2が、key3に対してvalue3が対応しています。

辞書型では作成後でも要素の追加や削除ができますが、1つの辞書型の中に同じkeyは1つしか存在できません。

辞書型オブジェクトの作り方

辞書型オブジェクトは{}の中にkeyとvalueの組み合わせをコロンで区切って書いていくだけです。

【コード例】

# 辞書型オブジェクトを作成
mydict = {"apple":1, "orange":2, "banana":3}
# 作成した辞書型オブジェクトを出力
print(mydict)

【出力結果】

{‘apple’: 1, ‘orange’: 2, ‘banana’: 3}

今回の例では、mydictという辞書型のオブジェクトが出来上がります。

別の作り方として{}を使わないで、以下のような書式で辞書を作ることも可能です。

【コード例②】

# 辞書型オブジェクトを作成
mydict = dict([('apple', 1), ('orange', 2), ('banana', 3)])
# 作成した辞書型オブジェクトを出力
print(mydict)

【出力結果②】

{‘apple’: 1, ‘orange’: 2, ‘banana’: 3}

【コード例③】

# 辞書型オブジェクトを作成
mydict = dict(apple=1, orange=2, banana=3)
# 作成した辞書型オブジェクトを出力
print(mydict)

【出力結果③】

{‘apple’: 1, ‘orange’: 2, ‘banana’: 3}

辞書型オブジェクトの各要素へのアクセス方法

辞書型オブジェクトは、リスト型のように複数の要素を持つことが出来ます。
しかし冒頭でも述べたように、リスト型とは異なり、辞書型オブジェクトには順序がありません。
ですので、任意の値を取り出すためにはkeyで指定することになります。

【コード例】

# 辞書型オブジェクトを作成
mydict = {"apple":1, "orange":2, "banana":3}
# appleの値を出力
print(mydict["apple"])

【出力結果】

1

このコード例では、appleという要素のvalueを調べました。

辞書型オブジェクトから任意の要素を検索する場合、keysメソッド、valuesメソッドを使います。

keysメソッド

keysメソッド「.key()」で辞書の中にあるkey全てをリスト型で出力することができます。

【コード例】

# 辞書型オブジェクトを作成 
fdict = {"apple":1, "orange":2, "banana":3} 
# 辞書内にある全てのキーをリスト形式で出力 
print(fdict.keys())
# 「orange」というキーがあるかチェック 
print("orange" in fdict.keys())

【出力結果】

dict_keys([‘apple’, ‘orange’, ‘banana’])

True

valuesメソッド

辞書の中にある全ての値を見たい時はvaluesメソッド「 .value()」が便利です。

.value()を使えば辞書の中にある全ての値をリスト形式で取り出すことができます。

【コード例】

# 辞書型オブジェクトを作成
fdict = {"apple":1, "orange":2, "banana":3}
# 辞書にある全ての値をリスト形式で出力 
print(fdict.values())
# 「5」という値があるかチェック
print(5 in fdict.values())

【出力結果】

dict_values([1, 2, 3])

False

itemsメソッド

itemsメソッドを使うことで、辞書型の全てのkeyとvalueを取得できます。
itemsメソッドで取得したkeyとvalueの一覧はdict_items型の値として返します。

【コード例】

# 辞書型オブジェクトを作成
mydict = {"apple":1, "orange":2, "banana":3}
# 辞書型にある全ての要素を出力
print(mydict.items())

【出力結果】

dict_items([(‘apple’, 1), (‘orange’, 2), (‘banana’, 3)])

辞書型オブジェクトに要素を追加する方法

作成済みの辞書に新しくキーや値を追加したり、既にあるキーの値を変更することもできます。

新しいキーと値を追加する

【書式】

辞書名[新しいキー] = 値

作成済みの辞書に対して、新しいキーを指定して値を代入します。
指定したキーが存在しなかった場合、新しい要素として辞書に追加されます。

【コード例】

# 辞書型オブジェクトを作成
fdict = {"apple":1, "orange":2, "banana":3}
# 新しい要素「peach」を追加
fdict["peach"] = 4
# 追加後の辞書型オブジェクトを出力
print(fdict)

【出力結果】

{“apple”:1, “orange”:2, “banana”:3, “peach”:4}

こちらのコードでは、新しい要素である「peach:4」を追加しました。

既存のキーに新しい値を上書きする

リストと同じで辞書も後から値を書き換え可能です。(ミュータブル)

作成済みの辞書に対して、既にあるキーを指定すると値を上書きして書き換えることができます。

【書式】

辞書名[既存のキー] = 値

作成済みの辞書に対して、既にあるキーを指定して値を代入します。
指定したキーが存在する場合、新しい値が辞書に上書きされます。

【コード例】

# 辞書型オブジェクトを作成
mydict = {"apple":1, "orange":2, "banana":3}
# 要素「apple」の値を上書き
mydict["apple"] = 4
# 上書き後の辞書型オブジェクトを出力
print(mydict)

【出力結果】

{“apple”:4, “orange”:2, “banana”:3}

このコードでは、既にある要素「apple」の値を「4」に上書きしました。

setdefaultメソッド

setdefaultメソッドを使って、新しい要素を追加することも出来ます。

【コード例】

# 辞書型オブジェクトを作成
mydict = {"apple":1, "orange":2, "banana":3}
# 新しい要素「peach」を追加
mydict.setdefault("peach", 4)
# 追加後の辞書型オブジェクトを出力
print(mydict)

【出力結果】

{“apple”:1, “orange”:2, “banana”:3, “peach”:4}

setdefaultメソッドは、2つの引数を受け取ります。
第1引数は要素のkey、第2引数は要素のvalueです。

keyが存在する場合、値は更新されずに既存の値のままです。
keyが存在しない場合、引数のkeyとvalueを新しく辞書に追加します。

辞書型オブジェクトの中に辞書型を追加する

既存の辞書型オブジェクトに、別の辞書型オブジェクトを要素として追加することも可能です。
作成済みの辞書に対して、新しくキーを指定して追加したい辞書名を代入します。

【コード例】

# 辞書型オブジェクト1を作成
mydict1 = {"apple":1, "orange":2, "banana":3}
# 辞書型オブジェクト2を作成
mydict2 = {"peach":4, "cherry":5, "melon":6}
# 辞書型1の中に辞書型2を追加
mydict1["dict"] = mydict2
# 追加後の辞書型オブジェクト1を出力
print(mydict1)

【出力結果】

{‘apple’: 1, ‘orange’: 2, ‘banana’: 3, ‘dict’: {‘peach’: 4, ‘cherry’: 5, ‘melon’: 6}}

新しく要素を追加する方法と同じで、値の部分に辞書型オブジェクトを指定するだけです。
今回は辞書型オブジェクト「mydict2」を追加しました。
dictというkeyに結び付けられた値は{}の中に含まれているので、
辞書型オブジェクトであることが確認できます。

updateを使って他の辞書と統合

既にあるキーの値は上書き、存在していないキーは値ごと辞書に追加されます。

【コード例】

# 1つ目の辞書型オブジェクトを作成
mydict = {'x': 10, 'y': 20}
# 2つ目の辞書型オブジェクトを作成
mydict2 = {'x': 1000, 'j':500}
# 2つの辞書型オブジェクトを結合
mydict.update(mydict2)
# 追加後の辞書型オブジェクトを出力
print(mydict)

【出力結果】

{‘x’: 1000, ‘y’: 20, ‘j’: 500}

辞書型オブジェクトから要素を削除する方法

辞書型の中にある要素を削除するには、popメソッド、clearメソッドを使います。

指定したkeyを削除するpopメソッド

popメソッドで引数にkeyを指定すると、指定したkeyが辞書から削除されます。

【コード例】

# 辞書型オブジェクトを作成
mydict = {"apple":1, "orange":2, "banana":3}
# orangeの要素を削除
mydict.pop("orange")
# 削除後の辞書型オブジェクトを出力
print(mydict)

【出力結果】

{‘apple’: 1, ‘banana’: 3}

すべての要素を削除するclearメソッド

clearメソッドでは、指定した辞書オブジェクトにある全ての要素が一掃されます。

【コード例】

# 辞書型オブジェクトを作成
mydict = {"apple":1, "orange":2, "banana":3}
# 辞書型のすべての要素を削除
mydict.clear()
# 削除後の辞書型オブジェクトを出力
print(mydict)

【出力結果】

{}

辞書型オブジェクト内にある要素の並び替え

sortedメソッドを使うことで、keyを昇順にソートすることができます。
ただし、返ってくる値はリスト型になるので注意しましょう。

key昇順ソート

辞書型オブジェクトにあるキーと要素のペアを、keyの値が小さい順に並び変えます。

【コード例】

# 辞書型オブジェクトを作成
dic = {"X": 80, "A": 200, "E": 5, "R": 20, "S": 40}
# keyの値が小さい順にソート
dic2 = sorted(dic.items())
print(dic2)

【出力結果】

[(‘A’, 200), (‘E’, 5), (‘R’, 20), (‘S’, 40), (‘X’, 80)]

key降順ソート

辞書型オブジェクトにあるキーと要素のペアを、keyの値が大きい順に並び変えます。

【コード例】

# 辞書型オブジェクトを作成
dic = {"X": 80, "A": 200, "E": 5, "R": 20, "S": 40}
# keyの値が大きい順にソート
dic2 = sorted(dic.items(), reverse=True)
print(dic2)

【出力結果】

[(‘X’, 80), (‘S’, 40), (‘R’, 20), (‘E’, 5), (‘A’, 200)]

value昇順ソート

辞書型オブジェクトにあるキーと要素のペアを、valueの値が小さい順に並び変えます。

【コード例】

# 辞書型オブジェクトを作成
dic = {"X": 80, "A": 200, "E": 5, "R": 20, "S": 40}
# valueの値が小さい順にソート
dic2 = sorted(dic.items(), key=lambda x:x[1])
print(dic2)

【出力結果】

[(‘E’, 5), (‘R’, 20), (‘S’, 40), (‘X’, 80), (‘A’, 200)]

value降順ソート

辞書型オブジェクトにあるキーと要素のペアを、valueの値が大きい順に並び変えます。

【コード例】

# 辞書型オブジェクトを作成
dic = {"X": 80, "A": 200, "E": 5, "R": 20, "S": 40}
# valueの値が大きい順にソート
dic2 = sorted(dic.items(), key=lambda x:x[1], reverse=True)
print(dic2)

【出力結果】

[(‘A’, 200), (‘X’, 80), (‘S’, 40), (‘R’, 20), (‘E’, 5)]

コメント

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