辞書オブジェクト (dictionary object)¶
-
PyTypeObject
PyDict_Type¶ この
PyTypeObjectのインスタンスは Python の辞書を表現します。このオブジェクトは、Python プログラムにはdictおよびtypes.DictTypeとして公開されています。
-
int
PyDict_Check(PyObject *p)¶ 引数が
PyDictObjectのときに真を返します。バージョン 2.2 で変更: サブタイプを引数にとれるようになりました.
-
PyObject*
PyDictProxy_New(PyObject *dict)¶ - Return value: New reference.
あるマップ型オブジェクトに対して、読み出し専用に制限されたプロキシオブジェクト (proxy object) を返します。通常、この関数は動的でないクラス型 (non-dynamic class type) のクラス辞書を変更させないためにプロキシを作成するために使われます。
バージョン 2.2 で追加.
-
int
PyDict_Contains(PyObject *p, PyObject *key)¶ 辞書 p に key が入っているか判定します。p の要素が key に一致した場合は
1を返し、それ以外の場合には0を返します。エラーの場合-1を返します。この関数は Python の式key in pと等価です。バージョン 2.4 で追加.
-
PyObject*
PyDict_Copy(PyObject *p)¶ - Return value: New reference.
p と同じキーと値のペアが入った新たな辞書を返します。
バージョン 1.6 で追加.
-
int
PyDict_SetItem(PyObject *p, PyObject *key, PyObject *val)¶ 辞書 p に、 key をキーとして値 value を挿入します。 key はハッシュ可能(hashable)でなければなりません; ハッシュ可能でない場合、
TypeErrorを送出します。成功した場合には0を、失敗した場合には-1を返します。
-
int
PyDict_SetItemString(PyObject *p, const char *key, PyObject *val)¶ 辞書 p に、 key をキーとして値 value を挿入します。 key は
char*型でなければなりません。キーオブジェクトはPyString_FromString(key)で生成されます。成功した場合には0を、失敗した場合には-1を返します。
-
int
PyDict_DelItem(PyObject *p, PyObject *key)¶ 辞書 p から key をキーとするエントリを除去します。 key はハッシュ可能でなければなりません; ハッシュ可能でない場合、
TypeErrorを送出します。成功した場合には0を、失敗した場合には-1を返します。
-
int
PyDict_DelItemString(PyObject *p, char *key)¶ 辞書 p から文字列 key をキーとするエントリを除去します。成功した場合には
0を、失敗した場合には-1を返します。
-
PyObject*
PyDict_GetItem(PyObject *p, PyObject *key)¶ - Return value: Borrowed reference.
辞書 p 内で key をキーとするオブジェクトを返します。キー key が存在しない場合には NULL を返しますが、例外をセット しません。
-
PyObject*
PyDict_GetItemString(PyObject *p, const char *key)¶ - Return value: Borrowed reference.
PyDict_GetItem()と同じですが、 key はPyObject*ではなくchar*で指定します。
-
PyObject*
PyDict_Items(PyObject *p)¶ - Return value: New reference.
辞書オブジェクトのメソッド
dict.items()のように、辞書 p 内の全ての要素対が入ったPyListObjectを返します。
-
PyObject*
PyDict_Keys(PyObject *p)¶ - Return value: New reference.
辞書オブジェクトのメソッド
dict.keys()のように、辞書 p 内の全てのキーが入ったPyListObjectを返します。
-
PyObject*
PyDict_Values(PyObject *p)¶ - Return value: New reference.
辞書オブジェクトのメソッド
dict.values()のように、辞書 p 内の全ての値が入ったPyListObjectを返します。
-
Py_ssize_t
PyDict_Size(PyObject *p)¶ 辞書内の要素の数を返します。辞書に対して
len(p)を実行するのと同じです。バージョン 2.5 で変更: この関数は以前は
intを返していました。この変更により、 64bit システムを正しくサポートするには修正が必要になります。
-
int
PyDict_Next(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue)¶ 辞書 p 内の全てのキー/値のペアにわたる反復処理を行います。 ppos が参照している
Py_ssize_t型は、この関数で反復処理を開始する際に、最初に関数を呼び出すよりも前に0に初期化しておかなければなりません; この関数は辞書内の各ペアを取り上げるごとに真を返し、全てのペアを取り上げたことが分かると偽を返します。パラメタ pkey および pvalue には、それぞれ辞書の各々のキーと値を指すポインタか、または NULL が入ります。この関数から返される参照はすべて借りた参照になります。反復処理中に ppos を変更してはなりません。この値は内部的な辞書構造体のオフセットを表現しており、構造体はスパースなので、オフセットの値に一貫性がないためです。例えば:
PyObject *key, *value; Py_ssize_t pos = 0; while (PyDict_Next(self->dict, &pos, &key, &value)) { /* do something interesting with the values... */ ... }
反復処理中に辞書 p を変更してはなりません。 (Python 2.1 からは) 辞書を反復処理する際に、キーに対応する値を変更しても大丈夫になりましたが、キーの集合を変更しないことが前提です。以下に例を示します:
PyObject *key, *value; Py_ssize_t pos = 0; while (PyDict_Next(self->dict, &pos, &key, &value)) { int i = PyInt_AS_LONG(value) + 1; PyObject *o = PyInt_FromLong(i); if (o == NULL) return -1; if (PyDict_SetItem(self->dict, key, o) < 0) { Py_DECREF(o); return -1; } Py_DECREF(o); }
バージョン 2.5 で変更: この関数は以前は ppos の型に
int *を利用していました。この変更により、 64bit システムを正しくサポートするには修正が必要になります。
-
int
PyDict_Merge(PyObject *a, PyObject *b, int override)¶ マップ型オブジェクト b の全ての要素にわたって、反復的にキー/値のペアを辞書 a に追加します。 b は辞書か、
PyMapping_Keys()またはPyObject_GetItem()をサポートする何らかのオブジェクトにできます。 override が真ならば、 a のキーと一致するキーが b にある際に、既存のペアを置き換えます。それ以外の場合は、 b のキーに一致するキーが a にないときのみ追加を行います。成功した場合には0を返し、例外が送出された場合には-1を返します。バージョン 2.2 で追加.
-
int
PyDict_Update(PyObject *a, PyObject *b)¶ C で表せば
PyDict_Merge(a, b, 1)と同じで、また Python のa.update(b)と似ていますが、PyDict_Update()は第二引数が "keys" 属性を持たない場合にキー/値ペアのシーケンスを反復することはありません。成功した場合には0を返し、例外が送出された場合には-1を返します。バージョン 2.2 で追加.
-
int
PyDict_MergeFromSeq2(PyObject *a, PyObject *seq2, int override)¶ seq2 内のキー/値ペアを使って、辞書 a の内容を更新したり統合したりします。seq2 は、キー/値のペアとみなせる長さ 2 の反復可能オブジェクト(iterable object) を生成する反復可能オブジェクトでなければなりません。重複するキーが存在する場合、override が真ならば先に出現したキーを使い、そうでない場合は後に出現したキーを使います。成功した場合には
0を返し、例外が送出された場合には-1を返します。(戻り値以外は) 等価な Python コードを書くと、以下のようになります:def PyDict_MergeFromSeq2(a, seq2, override): for key, value in seq2: if override or key not in a: a[key] = value
バージョン 2.2 で追加.
