PR

Python 辞書型(dictionary)の基礎とそれぞれのメゾットの使い方

スポンサーリンク
この記事は約12分で読めます。

辞書型(dictionary)の基本

辞書は キー(key): 値(value) のペアの集合です。

辞書型は { } で囲みます。

以下のサンプルは辞書aの キーxに10 yに20 を入れています。

>>> a = {'x': 10, 'y': 20}
>>> a
{'x': 10, 'y': 20}
>>>

キーの値を取り出す

辞書 a に以下のキーと値がある場合に

>>> a = {'x': 10, 'y': 20}

辞書 a のキーxの値を取り出すには、a[‘x’]と記述し、

yの値を取り出すには、a[‘y’]と記述します。

>>> a['x']
10
>>>
>>> a['y']
20
>>>

 

キーの値を書き換える

辞書aに代入されている キーの値 20 100に 書き換えるには

辞書オブジェクト.[‘キー(key)’] = 値(value)
a['y'] = 100

のように記述します。

>>> a = {'x': 10, 'y': 20}
>>> a['y'] = 100
>>> a
{'x': 10, 'y': 100}
>>>

 

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

新しいキーを追加する際は、以下のように追加したいキーと値を書きます。
以下のサンプルは既存のデータ{‘x’: 10, ‘y’: 100}がありそのデータに
キー w  300 を追加したサンプルです。

>>> a['w'] = 300
>>> a
{'x': 10, 'y': 100, 'w': 300}
>>>

 

勿論、キーには数値や文字も指定できます。
日本語表示できないと困りますからね(笑)

以下のサンプルは

a = {'x': 10, 'y': 100, 'w': 300}に aのキー(key)1に値(value)‘あいうえお’

を追加し更に

キー(key)‘辞書’に値(value)‘日本語でも大丈夫’

と追加したサンプルです。

 

>>> a[1] = 'あいうえお'
>>> a
{'x': 10, 'y': 100, 'w': 300, 1: 'あいうえお'}
>>> a['辞書'] = '日本語も大丈夫'
>>> a
{'x': 10, 'y': 100, 'w': 300, 1: 'あいうえお', '辞書': '日本語も大丈夫'}
>>>

dictを指定して生成もできます。

>>> dict(d=100, e=200)
{'d': 100, 'e': 200}
>>> dict([('e',10),('d',20)])
{'e': 10, 'd': 20}
>>>

キーがあるかどうか調べる

キーがあれば、True なければ、False が返ってきます。

以下のコードを見て解るように d に ‘a’のkeyがありますので、Trueとなり

dに‘c’のkeyはないので、Falseとなります。

>>> d = {'a': 100,'b': 200}
>>> 'a' in d
True
>>> 'c' in d
False
>>>

 

辞書型のメゾット


 |  clear(...)
 |      D.clear() -> None.  Remove all items from D.
 |
 |  copy(...)
 |      D.copy() -> a shallow copy of D
 |
 |  get(self, key, default=None, /)
 |      Return the value for key if key is in the dictionary, else default.
 |
 |  items(...)
 |      D.items() -> a set-like object providing a view on D's items
 |
 |  keys(...)
 |      D.keys() -> a set-like object providing a view on D's keys
 |
 |  pop(...)
 |      D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
 |      If key is not found, d is returned if given, otherwise KeyError is raised
 |
 |  popitem(...)
 |      D.popitem() -> (k, v), remove and return some (key, value) pair as a
 |      2-tuple; but raise KeyError if D is empty.
 |
 |  setdefault(self, key, default=None, /)
 |      Insert key with a value of default if key is not in the dictionary.
 |
 |      Return the value for key if key is in the dictionary, else default.
 |
 |  update(...)
 |      D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
 |      If E is present and has a .keys() method, then does:  for k in E: D[k] = E[k]
 |      If E is present and lacks a .keys() method, then does:  for k, v in E: D[k] = v
 |      In either case, this is followed by: for k in F:  D[k] = F[k]
 |
 |  values(...)
 |      D.values() -> an object providing a view on D's values

 

clear(アイテムをクリアする)

clearメゾットは 指定した変数からすべてのアイテムを削除します。

今回は、dのアイテムを削除してますので、もう一度dを読み込むと空の{}だけが表示されます。

>>> d = {'a': 100,'b': 200}
>>> d
{'a': 100, 'b': 200}
>>> d.clear()
>>> d
{}
>>>

指定したkeyを消したい際は、popメゾットを使用します。

copy

辞書型(dict)では参照渡しとなるため、以下のようにx = yとしても参照渡しとなるためyの値は100になったままとなります。

要素へのアクセスの際は{}ではなく[]を使います

>>> x = {'a': 1}
>>> y = x
>>> y['a'] = 100
>>> x
{'a': 100}
>>> y
{'a': 100}
>>>

copyメゾットを使用するとyに1000がコピーされたのが解ります。

>>> x = {'a': 100}
>>> y['a'] =1000
>>> x
{'a': 100}
>>> y
{'a': 1000}
>>>

get

keyが辞書にある場合はkeyの値を返し、そうでない場合はデフォルトを返します。

 

d = {'x': 100, 'y': 20, 'j': 500}
r = d.get('x')
print(r)

実行結果

100

default が与えられなかった場合、デフォルトでは None となります。そのため、このメソッドは KeyError を送出することはありません。

d = {'x': 100, 'y': 20, 'j': 500} 
r = d.get('z')
print(r)

実行結果

None

items

Dのアイテムのビューを提供するセットのようなオブジェクト

辞書の項目 ((key, value) 対) の新しいビューを返します。ビューオブジェクトのドキュメント を参照してください。

>>> d = {'x':100, 'y':20, 'j':500}
>>> d.items()
dict_items([('x', 100), ('y', 20), ('j', 500)])
>>>

 

keys(キーを取り出す)

以下のようにdの変数にキーにxと値yがある場合

d = {'x': 10, 'y': 20}
print(d.keys())

dに入っているキーを返します。

dict_keys(['x', 'y'])

 

pop (指定されたキーの削除)

popメゾットは指定されたキーを削除します。

以下のサンプルは、変数d の x のキーを削除しています。

d = {'x': 100, 'y': 20, 'j': 500}
d.pop('x')
print(d)

実行結果

{'y': 20, 'j': 500}

 

popで指定したキーが見つからなければ「KeyError」

削除したいキーが見つからない場合は、KeyError: が発生します。

以下の実行結果は d = {'x': 100, 'y': 20, 'j': 500} にないキーvd.pop('v') と入力して削除しようとした際発生したエラーです。

Traceback (most recent call last):
  File "C:/Users/chiraura/PycharmProjects/Pyhton_programming/lesson.py", line 36, in 
    d.pop('v')
KeyError: 'v'

 

delでも削除できる

popの他にも delでも同様のことができますが要素へのアクセスですので[]で囲みます。

メゾットの場合()で囲むのですが、()囲んだり{}で囲むとエラーとなりますので、 [] で囲みます。

また、del d のように辞書オブジェクトを指定すると 辞書オブジェクト名ごと削除されるので、注意が必要です。

>>> d = {'x': 100, 'y': 20, 'j': 500}
>>> del d ['x']
>>> d
{'y': 20, 'j': 500}

 

popitem(最後のアイテムから削除)

任意の (key, value) 対を辞書から消去して返します。 対は LIFO の順序で返却されます。

集合のアルゴリズムで使われるのと同じように、 popitem() は辞書に繰り返し適用して消去するのに便利です。辞書が空であれば、 popitem() の呼び出しは KeyError を送出します。

 

書き方

辞書オブジェクト.popitem()

それでは、辞書オブジェクトdに アイテムx:100 y:20 j:500 を入れて、popitemで最後のアイテムから削除します。

1回目では最後の key j のアイテムが削除されます。

>>> d = {'x': 100, 'y': 20, 'j': 500}
>>> d.popitem()
('j', 500)
>>> d
{'x': 100, 'y': 20}
>>>

2回目ではkey y のアイテムが削除されたので key x が残ります。

>>> d.popitem()
('y', 20)
>>>
>>> d
{'x': 100}
>>>

3回目ではkey x が削除されていますので、空のオブジェクトが表示されます。

>>> d.popitem()
('x', 100)
>>> d
{}
>>>

4回目では辞書が空なのでKeyErrorが送出されます。

>>> d.popitem()
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 'popitem(): dictionary is empty'
>>>

 

setdefault(キーと値の追加)

キーが辞書にない場合は、デフォルトの値でキーを挿入します。

keyが辞書にある場合はkeyの値を返し、そうでない場合はデフォルトを返します。

default のデフォルトは None です。

書き方

辞書オブジェクト. setdefault(Key, Value)

 

update(値の更新・追加)

Update は値の更新(上書き)・追加などができます。

まず、 d と kのキーにそれぞれの値を入力して出力してみます。

d = {'x': 10, 'y': 20}
k = {'x': 100, 'j':500}
print(d, k)

d と k の値はそれぞれ出力されます。↓

{'x': 10, 'y': 20} {'x': 100, 'j': 500}

 

次にk[x]の値を d[x]に上書きし、k [j] に値を追加する場合

d.update(k)
print(d)

すると d[x] の値10が k[x]の値 100に上書きされ、jの値が 500 になっているのがわかります。

{'x': 100, 'y': 20, 'j': 500}

 

指定していないキー z を指定した場合は None が返ってきます。

r = d.get('x')
s = d.get('z')
print(r)
print(s)

この場合 r[x]には 100 が表示され s[z] の場合キーがないので None となります。

100
None

 

values(値)

値(value)を見るには

d = {'x': 10, 'y': 20}
print(d.values())

バリューの値 10 と 20 が出力されました。

dict_values([10, 20])

 

 

コメント

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