calendarcodediamondfacebookfingerglobalgoogleplushatenahomepagetopplainpocketrssservicetwitterwordpresshome2searchfoldernext-arrowback-arrowfirst-arrowlast-arrow

Python : 辞書の基本操作編(get、dict 型、keys、values、items など)

辞書はキーと値のセットを扱う。要素の順序は管理されておらず、0 や 1 などのオフセットは使わない。キーはイミュータブル(変更不可オブジェクト。数値型, bool, tuple, str, range, bytes, frozenset, file object)なら何でもよい。辞書はミュータブル(変更可能オブジェクト)なので、キーとバリュー要素を追加・修正・削除ができる。

エンジニア速報は Twitter の@commteで 1 日 5 回配信しています。

Sponsored Link

目次

辞書のポイント

  • 辞書はミュータブル(変更可能オブジェクト)
  • キー(key) と値(value) を対応づけるデータ
  • オフセットは使わない
  • 辞書を扱うデータ型として dict 型がある
  • 辞書のキーには、不変オブジェクト(文字列、数値、タプルなど)が利用可能
  • 辞書のキーには、可変オブジェクト(リスト、辞書など)は利用不可

辞書は、{} にキーと値を入れて作る。キーが辞書の中に存在しない場合、例外 KeyError が発生する。例外を発生させたくない場合は、後述する get()メソッドを使う。

fruits = {'apple': 1, 'banana': 2, 'grape': 3} fruits['apple'] # 1

get()

get()メソッドを使うと、キーに対応する値を例外なしで返すことができる。

キーがあれば対応するバリューが返される。

fruits = {'apple':'red', 'banana':'yellow', 'grape':'purple'} fruits.get('apple', '見つかりません') # 'red'

キーが存在しなければ、オプションのバリューで設定した文字列が返される。設定しない場合は、None が返される。

fruits = {'apple':'red', 'banana':'yellow', 'grape':'purple'} fruits.get('lemon', '見つかりません') # '見つかりません'

dict 型

dict 型は辞書を扱う型である。辞書は {} を使う。

fruits = {'apple':'red', 'banana':'yellow', 'grape':'purple'} type(fruits) # dict

{} で囲まなくても、dict() に名前付き引数と値を渡すだけで辞書を作ることができる。

fruits = dict(apple=1, banana=2, grape=3) fruits # {'apple': 1, 'banana': 2, 'grape': 3}

dict() で変換する場合、リストの中にリストがあると、シーケンス(list, tuple, range)の先頭の要素がキー、第二要素は値になる。

foods = [['apple', 1], ['banana', 2], ['grape', 3]] dict(foods) # {'apple': 1, 'banana': 2, 'grape': 3}

タプルのリストも同じ結果となる。

foods = [('apple', 1), ('banana', 2), ('grape', 3)] dict(foods) # {'apple': 1, 'banana': 2, 'grape': 3}

keys()

keys()は辞書のすべてのキーを取得できる。リストにする場合は、list()関数を使う。

fruits = {'apple':'red', 'banana':'yellow', 'grape':'purple'} list(fruits.keys()) # ['apple', 'banana', 'grape']

values()

values()は辞書のすべてのバリューを取得できる。

fruits = {'apple':'red', 'banana':'yellow', 'grape':'purple'} list(fruits.values()) # ['red', 'yellow', 'purple']

items()

items() は辞書のすべてのキーとバリューを取得できる。結果は、タプルで返される。

fruits = {'apple':'red', 'banana':'yellow', 'grape':'purple'} list(fruits.items()) # [('apple', 'red'), ('banana', 'yellow'), ('grape', 'purple')]

len()

len()は、キーとバリューのペア数を数える。

fruits = {'apple':'red', 'banana':'yellow', 'grape':'purple'} len(fruits) # 3

辞書の結合

辞書の結合は {**変数, **変数} を使う。3 つ以上の辞書を渡すことができる。

fruits = {'apple':1, 'banana':2} vegetable = {'broccoli': 3, 'carrot': 4} {**fruits, **vegetable} # {'apple': 1, 'banana': 2, 'broccoli': 3, 'carrot': 4}

update()の結合

update()関数を使うと、辞書のキーとバリューを結合できる。重複するキーがある場合、第二の辞書のバリューが渡される。

fruits = {'apple':1, 'banana':2} vegetable = {'broccoli': 3, 'carrot': 4} fruits.update(vegetable) fruits # {'apple': 1, 'banana': 2, 'broccoli': 3, 'carrot': 4} fruits = {'apple':1, 'banana':2} vegetable = {'apple': 3, 'carrot': 4} fruits.update(vegetable) fruits # {'apple': 3, 'banana': 2, 'carrot': 4}

del()

del()文を使うと、指定したキーと、そのキーに対応するバリューを削除する。対応するキーが存在しない場合は、例外を返す。

fruits = {'apple':'red', 'banana':'yellow', 'grape':'purple'} del fruits['banana'] fruits # {'apple': 'red', 'grape': 'purple'}

pop()

dict.pop() も指定したキーに対応するバリューを削除する。対応するキーが存在しない場合は、例外を返すが、第二引数にデフォルトバリューを設定すると例外は発生せず、辞書は変更されない。

fruits = {'apple':'red', 'banana':'yellow', 'grape':'purple'} fruits.pop('banana') fruits # {'apple': 'red', 'grape': 'purple'} fruits = {'apple':'red', 'banana':'yellow', 'grape':'purple'} fruits.pop('lemon', '見つかりませんでした') fruits # {'apple': 'red', 'banana': 'yellow', 'grape': 'purple'}

clear()

clear() を使うと、辞書の中にあるキーとバリューを全て削除できる。空の辞書を代入しても同じように全て削除される。

fruits = {'apple':'red', 'banana':'yellow', 'grape':'purple'} fruits.clear() fruits # {} fruits = {'apple':'red', 'banana':'yellow', 'grape':'purple'} fruits = {} fruits # {}

copy() と deepcopy()

元の辞書に影響を与えず変更を加えたいときは、copy()を使う。

fruits = {'apple':'red', 'banana':'yellow', 'grape':'purple'} foods = fruits.copy() foods['lemon'] = 'yellow' foods # {'apple': 'red', 'banana': 'yellow', #'grape': 'purple', 'lemon': 'yellow'} fruits # {'apple': 'red', 'banana': 'yellow', 'grape': 'purple'}

要素の中に二次元配列が存在する場合、元の辞書のリストを書き換えると、コピー先も書き換えられてしまうが、

fruits = {'apple':['red', 'green'], 'banana':'yellow', 'grape':'purple'} fruits_copy = fruits.copy() fruits['apple'][1] = 'yellow' fruits_copy # {'apple': ['red', 'yellow'], 'banana': 'yellow', 'grape': 'purple'}

copy モジュールをインポートして、copy.deepcopy() を使うと、コピー先は変更されない。

import copy fruits = {'apple':['red', 'green'], 'banana':'yellow', 'grape':'purple'} fruits_copy = copy.deepcopy(fruits) fruits['apple'][1] = 'yellow' fruits_copy # {'apple': ['red', 'green'], 'banana': 'yellow', 'grape': 'purple'}

for

for 文を使うと、キーが返される。

fruits = {'apple':'red', 'banana':'yellow', 'grape':'purple'} for i in fruits: print(i) # apple # banana # grape

values() 関数を使うとバリューを返す。

fruits = {'apple':'red', 'banana':'yellow', 'grape':'purple'} for i in fruits.values(): print(i) # red # yellow # purple

dict.items()関数を使うとキーとバリューがタプルで返される。

fruits = {'apple':'red', 'banana':'yellow', 'grape':'purple'} for i in fruits.items(): print(i) # ('apple', 'red') # ('banana', 'yellow') # ('grape', 'purple')

dict.items()の戻り値を、そのまま表示するか文字列に代入したい場合は、for の引数を 2 つ設定するとよい。

fruits = {'apple':'red', 'banana':'yellow', 'grape':'purple'} for a, b in fruits.items(): print(f'{a} は {b} です。') # apple は red です。 # banana は yellow です。 # grape は purple です。

真理値

空の辞書は偽となるが、要素が一つ以上存在する場合は真となる。

bool({}) # False bool({'a': 0}) # True

in 演算子を使うと、要素の有無を判定する。

words = {'a': 1, 'b':2, 'c':3} 'a' in words # True

値に対して in 演算子を使う場合は、values()を付ける。

words = {'a': 1, 'b':2, 'c':3} 1 in words.values() # True

Python おすすめ本

スポンサード リンク

Comments

Leave a Comment

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください