Pythonのディクショナリーについて¶
dict型のデータは、一意のキーと値のペアを使って管理される型です。
自然言語処理を行う際や、言語を翻訳したいときに役立ちます。
言語によってはディクショナリーはハッシュ・連想配列と呼ばれます。 dict型のデータ構造は、ハッシュ表という数値型のテーブルをキー・値と対応させるという 内部構造となっています。そのためdict型のデータはハッシュアブルな型を用いなければならりません。
Pythonではint, str, bytes, tuple, frozenset等がハッシュアブルな型となっていて、通常、dict型のキーはintかstr型とします。
ディクショナリーの内容を参照する
d = {"apple":"りんご", "orange":"みかん", "melon":"メロン"}
d["apple"] = "アップル"
d["strawberry"] = "いちご"
#setdefaultメソッドはキーが存在しない場合のみ値を設定するのに用いる
d.setdefault("apple","Good!!")
d.setdefault("watermelon","Good!!")
print(d)
{'apple': 'アップル', 'orange': 'みかん', 'melon': 'メロン', 'strawberry': 'いちご', 'watermelon': 'Good!!'}
ディクショナリーから値を取得する(get, pop, popitem)
getは値を取得、popは値を取得して削除(取り出し)する
popitem()は値をLIFOで取り出す(※Python3.7以降のみ)
getする際にはKeyErrorがおこらないよう、規定値("×")を指定する
print(d.get("apple", "×"))
print(d.get("pear", "×"))
print(d.pop("melon", "×"))
print(d.popitem())
りんご
×
メロン
('orange', 'みかん')
ディクショナリーのキーを判定(in)
特定のキーが含まれるかを判定したい時は、in演算子を使う
d = {"apple":"りんご", "orange":"みかん", "melon":"メロン"}
print("orange" in d)
print("pear" in d)
True
False
ディクショナリーのキーを削除(del, clear)
delで特定キーの削除、clearで全てのキーの削除を行う
d = {"apple":"りんご", "orange":"みかん", "melon":"メロン"}
del d["orange"]
print(d)
d.clear()
print(d)
{'apple': 'りんご', 'melon': 'メロン'}
{}
ディクショナリーの内容を列挙する(for...in...)
items, keys, valuesの戻り値は列挙可能な型となっている
d = {"Apple":"リンゴ","Orange":"ミカン","Melon":"メロン"}
#項目を列挙
for item in d.items():
print(item)
#キーと値を抽出して列挙
for key, value in d.items():
print(key, " : ", value)
#キーを列挙
for key in d.keys():
print(key)
#値を列挙
for value in d.values():
print(value)
('Apple', 'リンゴ')
('Orange', 'ミカン')
('Melon', 'メロン')
Apple : リンゴ
Orange : ミカン
Melon : メロン
Apple
Orange
Melon
リンゴ
ミカン
メロン
ディクショナリーのキーを比較する(&, |)
&, |等の演算子を使えば異なる辞書のkeysの積集合・和集合を求めることができる
d1 = {"Apple":"リンゴ","Orange":"ミカン","Melon":"メロン"}
d2 = {"Grape":"ブドウ","Orange":"ミカン","Pear":"なし","Apple":"リンゴ"}
print(d1.keys() & d2.keys())
{'Orange', 'Apple'}
ディクショナリーの初期化判定をする(defaultdict)
collectionsモジュール、defaultdictを使うことで初期値を管理する
import collections
#リストに何個同じキーが含まれているかを判定し、キーと対応する値をdict型に格納する
data = ["01","02","02","03","03"]
result = collections.defaultdict(int)
for key in data:
result[key] += 1
print(result)
defaultdict(<class 'int'>, {'01': 1, '02': 2, '03': 2})
ディクショナリーの内包表記(for...in...)
リスト・セットの内包表記と同様、ディクショナリーも内包表記にすることができる。他のディクショナリー型を別のディクショナリーにコピーする、等の用途で使える。リスト型やセット型の内容をディクショナリー型にコピーする事もできる
d = {"Apple":"リンゴ","Orange":"ミカン","Melon":"メロン"}
result = {value: key for key, value in d.items()}
print(result)
'リンゴ': 'Apple', 'ミカン': 'Orange', 'メロン': 'Melon'}1
次回はtuple型の使い方をまとめてチートシートを作ろうと思います。この調子で頑張りますね。