辞書オブジェクト—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/c-api/dict
移動先:案内検索

辞書オブジェクト

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の新機能。

PyObject *PyDict_Copy(PyObject *p)

p と同じキーと値のペアを含む新しい辞書を返します。

バージョン1.6の新機能。

int PyDict_SetItem(PyObject *p, PyObject *key, PyObject *val)
キーのキーで辞書 p に挿入します。 キーハッシュ可能である必要があります。 そうでない場合は、TypeErrorが発生します。 成功した場合は0を返し、失敗した場合は-1を返します。
int PyDict_SetItemString(PyObject *p, const char *key, PyObject *val)
キーをキーとして使用して、を辞書 p に挿入します。 キーchar*である必要があります。 キーオブジェクトは、PyString_FromString(key)を使用して作成されます。 成功した場合は0を返し、失敗した場合は-1を返します。
int PyDict_DelItem(PyObject *p, PyObject *key)
キーキーを使用して辞書 p のエントリを削除します。 キーはハッシュ可能である必要があります。 そうでない場合は、TypeErrorが発生します。 成功した場合は0を返し、失敗した場合は-1を返します。
int PyDict_DelItemString(PyObject *p, char *key)
文字列 key で指定されたキーを持つ辞書 p のエントリを削除します。 成功した場合は0を返し、失敗した場合は-1を返します。
PyObject *PyDict_GetItem(PyObject *p, PyObject *key)
キーキーを持つディクショナリ p からオブジェクトを返します。 キーキーが存在しないが、 ' が例外を設定していない場合は、 NULL を返します。
PyObject *PyDict_GetItemString(PyObject *p, const char *key)
これは PyDict_GetItem()と同じですが、キーPyObject*ではなくchar*として指定されます。
PyObject *PyDict_Items(PyObject *p)
ディクショナリメソッド dict.items()のように、ディクショナリからのすべてのアイテムを含む PyListObject を返します。
PyObject *PyDict_Keys(PyObject *p)
ディクショナリメソッド dict.keys()のように、ディクショナリからのすべてのキーを含む PyListObject を返します。
PyObject *PyDict_Values(PyObject *p)
ディクショナリメソッド 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で変更:この関数は、 pposint *タイプを使用していました。 これには、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の新機能。