Skip to main content

Cython implementation of Python's collections.OrderedDict

Project description

**This library is obsolete!** Python 3.5's ``collections.OrderedDict`` was `rewritten in C`_, and is now significantly faster than ``cyordereddict.OrderedDict`` for almost all operations.

.. _rewritten in C: https://bugs.python.org/issue16991

=============
cyordereddict
=============

.. image:: https://travis-ci.org/shoyer/cyordereddict.svg?branch=master
:target: https://travis-ci.org/shoyer/cyordereddict

.. image:: https://badge.fury.io/py/cyordereddict.svg
:target: https://pypi-hypernode.com/pypi/cyordereddict

The Python standard library's ``OrderedDict`` ported to Cython. A drop-in
replacement that is 2-6x faster.

Install:
``pip install cyordereddict``

Dependencies:
CPython (2.6, 2.7, 3.3 or 3.4) and a C compiler. Cython is only required
for the dev version.

Use:
.. code-block:: python

from cyordereddict import OrderedDict

Benchmarks:
Python 2.7:

================== ================================= =========================
Test Code Ratio (stdlib / cython)
================== ================================= =========================
``__init__`` empty ``OrderedDict()`` 1.8
``__init__`` list ``OrderedDict(list_data)`` 4.8
``__init__`` dict ``OrderedDict(dict_data)`` 4.6
``__setitem__`` ``ordereddict[0] = 0`` 8.6
``__getitem__`` ``ordereddict[0]`` 3
``update`` ``ordereddict.update(dict_data)`` 5.5
``__iter__`` ``list(ordereddict)`` 5.6
``items`` ``ordereddict.items()`` 5.9
``__contains__`` ``0 in ordereddict`` 2.3
================== ================================= =========================

Python 3.4:

================== ================================= =========================
Test Code Ratio (stdlib / cython)
================== ================================= =========================
``__init__`` empty ``OrderedDict()`` 1.5
``__init__`` list ``OrderedDict(list_data)`` 3.9
``__init__`` dict ``OrderedDict(dict_data)`` 4.2
``__setitem__`` ``ordereddict[0] = 0`` 8.4
``__getitem__`` ``ordereddict[0]`` 2.9
``update`` ``ordereddict.update(dict_data)`` 6.5
``__iter__`` ``list(ordereddict)`` 2.3
``items`` ``list(ordereddict.items())`` 2.1
``__contains__`` ``0 in ordereddict`` 2.3
================== ================================= =========================
To run these yourself, use ``cyordereddict.benchmark()``

Cavaets:
``cyorderedddict.OrderedDict`` is an extension type (similar to the
built-in ``dict``) instead of a Python class. This is necessary for speed,
but means that in a few pathological cases its behavior will differ from
``collections.OrderedDict``:

* The ``inspect`` module does not work on ``cyorderedddict.OrderedDict``
methods.
* Extension types use slots instead of dictionaries, so you cannot add
custom attributes without making a subclass (e.g.,
``OrderedDict.foo = 'bar'`` will fail).

You can do anything else you might do with an OrderedDict, including
subclassing: everything else passes the ``collections.OrderedDict`` test
suite. We based the Cython code directly on the Python standard library,
and thus use separate code bases for Python 2 and 3, specifically to
reduce the potential for introducing new bugs or performance regressions.

License:
MIT. Based on the Python standard library, which is under the Python
Software Foundation License.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cyordereddict-1.0.0.tar.gz (138.2 kB view details)

Uploaded Source

File details

Details for the file cyordereddict-1.0.0.tar.gz.

File metadata

File hashes

Hashes for cyordereddict-1.0.0.tar.gz
Algorithm Hash digest
SHA256 d9b2c31796999770801a9a49403b8cb49510ecb64e5d1e9d4763ed44f2d5a76e
MD5 8924331ec3bb754c92fd2603d3a29489
BLAKE2b-256 d11a364cbfd927be1b743c7f0a985a7f1f7e8a51469619f9fefe4ee9240ba210

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page