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

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

辞書オブジェクト

type PyDictObject
PyObject のこのサブタイプは、Pythonディクショナリオブジェクトを表します。
PyTypeObject PyDict_Type
PyTypeObject のこのインスタンスは、Python辞書タイプを表します。 これは、Pythonレイヤーの dict と同じオブジェクトです。
int PyDict_Check(PyObject *p)
p がdictオブジェクト、またはdictタイプのサブタイプのインスタンスである場合はtrueを返します。
int PyDict_CheckExact(PyObject *p)
p がdictオブジェクトであるが、dictタイプのサブタイプのインスタンスではない場合はtrueを返します。
PyObject *PyDict_New()
新しい空の辞書を返すか、失敗した場合はNULLを返します。
PyObject *PyDictProxy_New(PyObject *mapping)
読み取り専用の動作を強制するマッピングの types.MappingProxyType オブジェクトを返します。 これは通常、非動的クラスタイプのディクショナリの変更を防ぐためのビューを作成するために使用されます。
void PyDict_Clear(PyObject *p)
すべてのキーと値のペアの既存の辞書を空にします。
int PyDict_Contains(PyObject *p, PyObject *key)
辞書 pキーが含まれているかどうかを確認します。 p の項目がキーと一致する場合は1を返し、そうでない場合は0を返します。 エラーの場合は、-1を返します。 これは、Python式key in pと同等です。
PyObject *PyDict_Copy(PyObject *p)
p と同じキーと値のペアを含む新しい辞書を返します。
int PyDict_SetItem(PyObject *p, PyObject *key, PyObject *val)
valkey のキーで辞書 p に挿入します。 キーハッシュ可能である必要があります。 そうでない場合は、 TypeError が発生します。 成功した場合は0を返し、失敗した場合は-1を返します。 この関数val への参照を盗みません
int PyDict_SetItemString(PyObject *p, const char *key, PyObject *val)
key をキーとして、 val を辞書 p に挿入します。 key const char * である必要があります。 キーオブジェクトは、PyUnicode_FromString(key)を使用して作成されます。 成功した場合は0を返し、失敗した場合は-1を返します。 この関数val への参照を盗みません
int PyDict_DelItem(PyObject *p, PyObject *key)
キーキーを使用して辞書 p のエントリを削除します。 キーはハッシュ可能である必要があります。 そうでない場合は、 TypeError が発生します。 key が辞書にない場合、 KeyError が発生します。 成功した場合は0を返し、失敗した場合は-1を返します。
int PyDict_DelItemString(PyObject *p, const char *key)
文字列 key で指定されたキーを持つ辞書 p のエントリを削除します。 key が辞書にない場合、 KeyError が発生します。 成功した場合は0を返し、失敗した場合は-1を返します。
PyObject *PyDict_GetItem(PyObject *p, PyObject *key)

キーキーを持つディクショナリ p からオブジェクトを返します。 キーキーが存在しないが、が例外を設定せずにしている場合は、NULLを返します。

__hash__()および__eq__()メソッドの呼び出し中に発生する例外は抑制されることに注意してください。 エラー報告を取得するには、代わりに PyDict_GetItemWithError()を使用してください。

PyObject *PyDict_GetItemWithError(PyObject *p, PyObject *key)
例外を抑制しない PyDict_GetItem()のバリアント。 例外が発生した場合は、NULL with 例外セットを返します。 キーが存在しない場合は、NULL 例外セットなしを返します。
PyObject *PyDict_GetItemString(PyObject *p, const char *key)

これは PyDict_GetItem()と同じですが、 key PyObject * ではなく const char * として指定されます。

__hash__()および__eq__()メソッドを呼び出して一時文字列オブジェクトを作成しているときに発生する例外は抑制されることに注意してください。 エラー報告を取得するには、代わりに PyDict_GetItemWithError()を使用してください。

PyObject *PyDict_SetDefault(PyObject *p, PyObject *key, PyObject *defaultobj)

これは、Pythonレベルの dict.setdefault()と同じです。 存在する場合は、ディクショナリ p からキーに対応する値を返します。 キーがdictにない場合は、値 defaultobj で挿入され、 defaultobj が返されます。 この関数は、 key のハッシュ関数を、ルックアップと挿入について個別に評価するのではなく、一度だけ評価します。

バージョン3.4の新機能。

PyObject *PyDict_Items(PyObject *p)
ディクショナリのすべてのアイテムを含む PyListObject を返します。
PyObject *PyDict_Keys(PyObject *p)
辞書からのすべてのキーを含む PyListObject を返します。
PyObject *PyDict_Values(PyObject *p)
ディクショナリ p からのすべての値を含む PyListObject を返します。
Py_ssize_t PyDict_Size(PyObject *p)
辞書内のアイテムの数を返します。 これは、辞書のlen(p)と同等です。
int PyDict_Next(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue)

ディクショナリ p 内のすべてのキーと値のペアを繰り返し処理します。 ppos によって参照されるPy_ssize_tは、反復を開始するためにこの関数を最初に呼び出す前に、0に初期化する必要があります。 この関数は、ディクショナリ内の各ペアに対してtrueを返し、すべてのペアが報告されるとfalseを返します。 パラメータ pkey および pvalue は、それぞれ各キーおよび値が入力される PyObject * 変数を指すか、 [である可能性があります。 X177X]。 それらを介して返された参照はすべて借用されます。 ppos は反復中に変更しないでください。 その値は内部ディクショナリ構造内のオフセットを表し、構造がスパースであるため、オフセットは連続していません。

例えば:

PyObject *key, *value;
Py_ssize_t pos = 0;

while (PyDict_Next(self->dict, &pos, &key, &value)) {
    /* do something interesting with the values... */
    ...
}

辞書 p は、反復中に変更しないでください。 辞書を反復処理するときにキーの値を変更しても安全ですが、キーのセットが変更されない場合に限ります。 例えば:

PyObject *key, *value;
Py_ssize_t pos = 0;

while (PyDict_Next(self->dict, &pos, &key, &value)) {
    long i = PyLong_AsLong(value);
    if (i == -1 && PyErr_Occurred()) {
        return -1;
    }
    PyObject *o = PyLong_FromLong(i + 1);
    if (o == NULL)
        return -1;
    if (PyDict_SetItem(self->dict, key, o) < 0) {
        Py_DECREF(o);
        return -1;
    }
    Py_DECREF(o);
}
int PyDict_Merge(PyObject *a, PyObject *b, int override)
マッピングオブジェクト b を反復処理して、キーと値のペアを辞書 a に追加します。 b は辞書、または PyMapping_Keys()および PyObject_GetItem()をサポートする任意のオブジェクトです。 override がtrueの場合、 a の既存のペアは、 b で一致するキーが見つかった場合に置き換えられます。それ以外の場合、ペアは、 a の一致するキー。 成功した場合は0を返し、例外が発生した場合は-1を返します。
int PyDict_Update(PyObject *a, PyObject *b)
これは、CのPyDict_Merge(a, b, 1)と同じであり、Pythonのa.update(b)と似ていますが、 PyDict_Update()がキーのシーケンスの反復にフォールバックしない点が異なります。 2番目の引数に「keys」属性がない場合は値ペア。 成功した場合は0を返し、例外が発生した場合は-1を返します。
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
int PyDict_ClearFreeList()

フリーリストをクリアします。 解放されたアイテムの総数を返します。

バージョン3.3の新機能。