辞書型(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に 書き換えるには
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}
にないキーv
をd.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
を送出します。
書き方
それでは、辞書オブジェクト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
です。
書き方
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])
コメント