dict
dict: key:値
キーは重複不可で文字列・数値・タプル等のimmutableな値
要素に順序はない
{} でつくるのはsetと同じ
in での存在チェックや
- dict: key:値
- 初期化
- 初期化 : dict(key:値, key:値,...)
- 2つのリストからzipで辞書を作成
- イテレータと値の初期値で辞書をつくる : dist.fromkeys(イテレータ, 初期値)
- 要素の追加 : 辞書[キー] = 値
- 要素の追加(要素が無い時のみ) : setdefault(キー, 値)
- 要素の取得
- 他の辞書で更新 : update(辞書)
- 要素の削除
- pop(キー)
- 辞書内包表記 : {キー:値 for キー in イテラブル}
初期化
metro = { "G": "銀座線", # コメント "M": "丸ノ内線", "H": "日比谷線", "T": "東西線" } print(metro) # {'G': '銀座線', 'M': '丸ノ内線', 'H': '日比谷線', 'T': '東西線'}
初期化 : dict(key:値, key:値,...)
- タプルのリストを引数にして辞書を生成できる
data = dict([("yellow", 3), ("blue", 6), ("green", 5)]) print(data) # {'yellow': 3, 'blue': 6, 'green': 5}
- リストのタプルを引数にして辞書を生成できる
data = dict((["yellow", 3], ["blue", 6], ["green", 5])) print(data) # {'yellow': 3, 'blue': 6, 'green': 5}
- キーワード引数で辞書を生成できる
data = dict(yellow = 3, blue = 6, green = 7) print(data) # {'yellow': 3, 'blue': 6, 'green': 7} # キーが文字列になる
2つのリストからzipで辞書を作成
- キーと値のペアは少ない方で合わせられる
- キーの重複がある場合、後方優位
keys = ["yellow", "blue", "green", "blue", "red"] # redはペアがない為、無視される values = [3, 6, 5, 1] # blueのペアは後方優位で1 data = dict(zip(keys, values)) print(data) # {'yellow': 3, 'blue': 1, 'green': 5}
イテレータと値の初期値で辞書をつくる : dist.fromkeys(イテレータ, 初期値)
l = ["S", "M", "L"] d = dict.fromkeys(l, 0) # イテレータがkeyになる print(d) # {'S': 0, 'M': 0, 'L': 0} d2 = dict.fromkeys(l) # 初期値は省略可能 print(d2) # {'S': None, 'M': None, 'L': None}
- 同じ構造の辞書を作成
d = {'S': 1, 'M': 2, 'L': 3} d2 = dict.fromkeys(d, 0) print(d2)
要素の追加 : 辞書[キー] = 値
- キーがあれば更新、無ければ追加
data = {"yellow" : 3, "blue" : 6, "green" : 5} data["blue"] = 66 # 更新 print(data) # {'yellow': 3, 'blue': 66, 'green': 5} data["red"] = 22 # 追加 print(data) # {'yellow': 3, 'blue': 66, 'green': 5, 'red': 22}
要素の追加(要素が無い時のみ) : setdefault(キー, 値)
data = {"yellow" : 3, "blue" : 6, "green" : 5} a = data.setdefault("blue", 66) print(a) # ある時は既存の値を返す # 6 print(data) # ある時は更新されない # {'yellow': 3, 'blue': 6, 'green': 5} b = data.setdefault("white", 13) print(b) # 無い時はセットする値を返す # 13 print(data) # ある時は更新される # {'yellow': 3, 'blue': 6, 'green': 5, 'white': 13}
要素の取得
- キーで値を取得(リスト、タプルと同じ)
d = {'S': 1, 'M': 2, 'L': 3} try : print(d["M"]) # キーがないとエラーになる # 2 except KeyError: print("error")
- キーで値を取得 : get(キー)
d = {'S': 1, 'M': 2, 'L': 3} print(d.get("LL")) # get()はなくてもエラーにならない # None
- キーをリストで取得
d = {'S': 1, 'M': 2, 'L': 3} l = list(d.keys()) print(l) # ['S', 'M', 'L']
- 値をリストで取得
d = {'S': 1, 'M': 2, 'L': 3} l = list(d.values()) print(l) # [1, 2, 3]
- 要素(キー、値)をリストで取得
d = {'S': 1, 'M': 2, 'L': 3} l = d.items() print(l) # dict_items([('S', 1), ('M', 2), ('L', 3)]) for key, value in d.items(): # 要素をループで回す print(key, "&", value) # S & 1 # M & 2 # L & 3
他の辞書で更新 : update(辞書)
- 重複キーは無視、値は後方優位
data = {"yellow" : 3, "blue" : 6, "green" : 5} data2 = {"blue" : 16, "red" : 10} data.update(data2) print(data) # {'yellow': 3, 'blue': 16, 'green': 5, 'red': 10}
要素の削除
- キーを指定削除
data = {"yellow" : 3, "blue" : 6, "green" : 5, "red" : 9} del data["blue"] print(data) # {'yellow': 3, 'green': 5, 'red': 9}
- 全ての要素を削除
data.clear() print(data) # {}
pop(キー)
d = {'S': 1, 'M': 2, 'L': 3} a = d.pop("S") print(a) # 1 print(d) # {'M': 2, 'L': 3}
辞書内包表記 : {キー:値 for キー in イテラブル}
from random import randint data = ["yellow", "blue", "green", "red"] d = {key : randint(1,100) for key in data} print(d) # {'yellow': 53, 'blue': 68, 'green': 47, 'red': 7}