Multidict is dict-like collection of key-value pairs where key might occur more than once in the container.
HTTP Headers and URL query string require specific data structure:
multidict. It behaves mostly like a regular dict but it may have
several values for the same key and preserves insertion ordering.
The key is str (or istr for case-insensitive dictionaries).
multidict has four multidict classes:
MultiDict, MultiDictProxy, CIMultiDict
and CIMultiDictProxy.
Immutable proxies (MultiDictProxy and
CIMultiDictProxy) provide a dynamic view for the
proxied multidict, the view reflects underlying collection changes. They
implement the collections.abc.Mapping interface.
Regular mutable (MultiDict and CIMultiDict) classes
implement collections.abc.MutableMapping and allows them to change
their own content.
Case insensitive (CIMultiDict and
CIMultiDictProxy) assume the keys are case
insensitive, e.g.
>>> dct = CIMultiDict(key='val')
>>> 'Key' in dct
True
>>> dct['Key']
'val'Keys should be str or istr instances.
The library has optional C Extensions for speed.
Both the C extension and the pure-Python fallback are optimized for
free-threaded (no-GIL) Python as well as the regular GIL build, and their
performance is in the same ballpark as the built-in dict, typically
within 20-30% for common operations, since dict itself benefits from
per-version interpreter specializations that a third-party type cannot hook
into. See the benchmarks page for the full
per-operation breakdown of the C extension on both builds, and the
free-threading overhead figures for the pure-Python fallback.
Apache 2
$ pip install multidictThe library is Python 3 only!
PyPI contains binary wheels for Linux, Windows and MacOS. If you want to install
multidict on another operating system (or Alpine Linux inside a Docker) the
tarball will be used to compile the library from source. It requires a C compiler and
Python headers to be installed.
To skip the compilation, please use the MULTIDICT_NO_EXTENSIONS environment variable, e.g.:
$ MULTIDICT_NO_EXTENSIONS=1 pip install multidictPlease note, the pure Python (uncompiled) version is dramatically slower: the
pure-Python backend table measures
it at roughly 7 to 80 times more instructions than the C extension, depending
on the operation. Unless the target platform genuinely cannot build the C
extension, leave MULTIDICT_NO_EXTENSIONS unset and let it compile.
For extension development, set the MULTIDICT_DEBUG_BUILD environment variable to compile
the extensions in debug mode:
$ MULTIDICT_DEBUG_BUILD=1 pip install multidictSee RTD page.