Multidicts are useful for working with HTTP headers, URL query args etc.

The code was extracted from aiohttp library.


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 Mapping interface.

Regular mutable (MultiDict and CIMultiDict) classes implement MutableMapping and allows to change their own content.

Case insensitive (CIMultiDict and CIMultiDictProxy) ones assume the keys are case insensitive, e.g.:

>>> dct = CIMultiDict(key='val')
>>> 'Key' in dct
>>> dct['Key']

Keys should be either str or istr instance.

The library has optional Cython optimization for sake of speed.

Library Installation

$ pip install multidict

The library is Python 3 only!

Source code

The project is hosted on GitHub

Please file an issue on the bug tracker if you have found a bug or have some suggestion in order to improve the library.

The library uses Travis for Continuous Integration.

Discussion list

aio-libs google group:!forum/aio-libs

Feel free to post your questions and ideas here.

Authors and License

The multidict package is written by Andrew Svetlov.

It’s Apache 2 licensed and freely available.

Indices and tables