辞書オブジェクト
- type PyDictObject
- PyObject のこのサブタイプは、Pythonディクショナリオブジェクトを表します。
- PyTypeObject PyDict_Type
- PyTypeObject のこのインスタンスは、Pythonディクショナリタイプを表します。 これは、
dict
およびtypes.DictType
としてPythonプログラムに公開されます。
- int PyDict_Check(PyObject *p)
p がdictオブジェクト、またはdictタイプのサブタイプのインスタンスである場合はtrueを返します。
バージョン2.2で変更:サブタイプの受け入れを許可しました。
- int PyDict_CheckExact(PyObject *p)
p がdictオブジェクトであるが、dictタイプのサブタイプのインスタンスではない場合はtrueを返します。
バージョン2.4の新機能。
- PyObject *PyDict_New()
- 新しい空の辞書を返すか、失敗した場合は NULL を返します。
- PyObject *PyDictProxy_New(PyObject *dict)
読み取り専用の動作を強制するマッピングのプロキシオブジェクトを返します。 これは通常、非動的クラスタイプのディクショナリの変更を防ぐためのプロキシを作成するために使用されます。
バージョン2.2の新機能。
- void PyDict_Clear(PyObject *p)
- すべてのキーと値のペアの既存の辞書を空にします。
- int PyDict_Contains(PyObject *p, PyObject *key)
辞書 p にキーが含まれているかどうかを確認します。 p の項目がキーと一致する場合は
1
を返し、そうでない場合は0
を返します。 エラーの場合は、-1
を返します。 これは、Python式key in p
と同等です。バージョン2.4の新機能。
- 値をキーのキーで辞書 p に挿入します。 キーはハッシュ可能である必要があります。 そうでない場合は、
TypeError
が発生します。 成功した場合は0
を返し、失敗した場合は-1
を返します。
- キーをキーとして使用して、値を辞書 p に挿入します。 キーは
char*
である必要があります。 キーオブジェクトは、PyString_FromString(key)
を使用して作成されます。 成功した場合は0
を返し、失敗した場合は-1
を返します。
- キーキーを使用して辞書 p のエントリを削除します。 キーはハッシュ可能である必要があります。 そうでない場合は、
TypeError
が発生します。 成功した場合は0
を返し、失敗した場合は-1
を返します。
- int PyDict_DelItemString(PyObject *p, char *key)
- 文字列 key で指定されたキーを持つ辞書 p のエントリを削除します。 成功した場合は
0
を返し、失敗した場合は-1
を返します。
- キーキーを持つディクショナリ p からオブジェクトを返します。 キーキーが存在しないが、 ' が例外を設定していない場合は、 NULL を返します。
- これは PyDict_GetItem()と同じですが、キーは
PyObject*
ではなくchar*
として指定されます。
- ディクショナリメソッド dict.items()のように、ディクショナリからのすべてのアイテムを含む PyListObject を返します。
- ディクショナリメソッド dict.keys()のように、ディクショナリからのすべてのキーを含む PyListObject を返します。
- ディクショナリメソッド dict.values()のように、ディクショナリ p からのすべての値を含む PyListObject を返します。
- Py_ssize_t PyDict_Size(PyObject *p)
辞書内のアイテムの数を返します。 これは、辞書の
len(p)
と同等です。バージョン2.5で変更:この関数は
int
タイプを返しました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。
- int PyDict_Next(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue)
ディクショナリ p 内のすべてのキーと値のペアを繰り返し処理します。 ppos によって参照される
Py_ssize_t
は、反復を開始するためにこの関数を最初に呼び出す前に、0
に初期化する必要があります。 この関数は、ディクショナリ内の各ペアに対してtrueを返し、すべてのペアが報告されるとfalseを返します。 パラメータ pkey および pvalue は、それぞれ各キーおよび値が入力されるPyObject*
変数を指すか、 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 *
タイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。
- int PyDict_Merge(PyObject *a, PyObject *b, int override)
マッピングオブジェクト b を反復処理して、キーと値のペアを辞書 a に追加します。 b は辞書、または PyMapping_Keys()および PyObject_GetItem()をサポートする任意のオブジェクトです。 override がtrueの場合、 a の既存のペアは、 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()がキーのシーケンスの反復にフォールバックしない点が異なります。 2番目の引数に「keys」属性がない場合は値ペア。 成功した場合は0
を返し、例外が発生した場合は-1
を返します。バージョン2.2の新機能。
- int PyDict_MergeFromSeq2(PyObject *a, PyObject *seq2, int override)
seq2 のキーと値のペアから、辞書 a を更新またはマージします。 seq2 は、キーと値のペアとして表示される、長さ2の反復可能なオブジェクトを生成する反復可能なオブジェクトである必要があります。 キーが重複している場合、 override がtrueの場合は最後が優先され、それ以外の場合は最初が優先されます。 成功した場合は
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の新機能。