**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.python.org/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.
.. _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.python.org/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)
File details
Details for the file cyordereddict-1.0.0.tar.gz.
File metadata
- Download URL: cyordereddict-1.0.0.tar.gz
- Upload date:
- Size: 138.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9b2c31796999770801a9a49403b8cb49510ecb64e5d1e9d4763ed44f2d5a76e
|
|
| MD5 |
8924331ec3bb754c92fd2603d3a29489
|
|
| BLAKE2b-256 |
d11a364cbfd927be1b743c7f0a985a7f1f7e8a51469619f9fefe4ee9240ba210
|