{ "info": { "author": "Jakub Stasiak", "author_email": "jakub@stasiak.at", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Testing", "Topic :: Utilities" ], "description": "skiplistcollections\n===================\n\n.. image:: https://travis-ci.org/jstasiak/skiplistcollections.png?branch=master\n :alt: Build status\n :target: https://travis-ci.org/jstasiak/skiplistcollections\n\n*skiplistcollections* is a Python module containing skip list based sorted collections. *skiplistcollections* is written in Python and works with:\n\n* CPython 2.6+, 3.2+\n* PyPy 1.9+\n\nProject page on GitHub: https://github.com/jstasiak/skiplistcollections\n\nProject page on PyPI: https://pypi.python.org/pypi/skiplistcollections\n\nSkipListDict\n------------\n\n``SkipListDict`` is container providing dict-like interface and implemented using skip list. It's permanently sorted by key.\n\n* Iterating the container (starting with any key, supports reverse ordering) is *O(n)*\n* Getting, setting and deleting arbitrary key is *O(log n)* on average, *O(n)* in worst case (degenerated skip list)\n\nSee http://pythonsweetness.tumblr.com/post/45227295342/fast-pypy-compatible-ordered-map-in-89-lines-of-python for details.\n\n.. code-block:: python\n\n >>> from skiplistcollections import SkipListDict\n >>> things = SkipListDict(capacity=16)\n >>> len(things)\n 0\n >>> things['x'] = 1\n >>> things.setdefault('x', 'DEFAULT')\n 1\n >>> 'x' in things\n True\n >>> len(things)\n 1\n >>> things['g'] = 2\n >>> things['z'] = 3\n >>> tuple(things.keys())\n ('g', 'x', 'z')\n >>> tuple(things.values())\n (2, 1, 3)\n >>> tuple(things.items())\n (('g', 2), ('x', 1), ('z', 3))\n >>> tuple(things.items(start_key='x'))\n (('x', 1), ('z', 3))\n >>> tuple(things.items(start_key='x', reverse=True))\n (('x', 1), ('g', 2))\n >>> del things['z']\n >>> things.update({'a': 'A', 'b': 'B'})\n >>> len(things)\n 4\n >>> things\n SkipListDict({'a': 'A', 'b': 'B', 'g': 2, 'x': 1}, capacity=16)\n\n\nAs you can see, ``SkipListDict`` follows Python dict interface quite closely. In fact it inherits ``MutableMapping`` Abstract Base Class.\n\nThere are differences of course:\n\n* You need to set the maximum dict size when you create it\n* Initializing using another mapping is not supported yet\n* You can't use None as a key\n* ``items``, ``keys``, and ``values`` are views and accept ``start_key`` and ``reverse`` parameters\n\nSkipListSet\n-----------\n\n``SkipListSet`` is set implementation using skip list. It's permanently sorted by key.\n\n* Iterating the container is *O(n)*\n* Adding, removing and checking if a key exist in the containe is *O(log n)* on average, *O(n)* in worst case (degenerated skip list)\n\n.. code-block:: python\n\n >>> from skiplistcollections import SkipListSet\n >>> things = SkipListSet(capacity=16)\n >>> len(things)\n 0\n >>> things.add(3)\n >>> len(things)\n 1\n >>> things.add(1)\n >>> things.add(4)\n >>> things\n SkipListSet((1, 3, 4), capacity=16)\n >>> tuple(things)\n (1, 3, 4)\n >>> things.remove(2)\n Traceback (most recent call last):\n KeyError: 2\n\n\n\nChanges\n--------\n\n0.0.6\n`````\n* Fixed bug with SkipListDict yielding too many items if start_key was not found (GitHub issue #1)\n\n0.0.5\n`````\n\n* Fixed SkipListDict repr\n* Created SkipListSet\n\n0.0.4\n`````\n\n* Included start_key and reverse values in views reprs\n* Improved README\n\n\n0.0.3\n`````\n\n* ``items()``, ``values()``, ``keys()`` return views now\n\n0.0.2\n`````\n\n* Improved README\n\n\nCopyright\n---------\n\nOriginal version - Copyright (C) 2013 David Wilson\n\nCopyright (C) 2013 Jakub Stasiak\n\nThis source code is licensed under MIT license, see LICENSE file for details.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jstasiak/skiplistcollections", "keywords": null, "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "skiplistcollections", "package_url": "https://pypi.org/project/skiplistcollections/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/skiplistcollections/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/jstasiak/skiplistcollections" }, "release_url": "https://pypi.org/project/skiplistcollections/0.0.6/", "requires_dist": null, "requires_python": null, "summary": "Skip list based sorted collections", "version": "0.0.6" }, "last_serial": 966919, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "8858e076b881a3a805b7e4859412488e", "sha256": "d6f3869c49150af4fe731621d9a9cfb639cf140c54c945724b80cd8ac2cb5c49" }, "downloads": -1, "filename": "skiplistcollections-0.0.1.tar.gz", "has_sig": false, "md5_digest": "8858e076b881a3a805b7e4859412488e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2926, "upload_time": "2013-09-17T20:47:59", "url": "https://files.pythonhosted.org/packages/8f/02/0be38dbdce295e5ba55beffa4e482863844f53f9d1c0ecbd04c7f2a12182/skiplistcollections-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "863ce5d29f357720b7c18ded764c7667", "sha256": "a9a2030b0552799ecd39cbdf39023e5e8bf63b6d796c0a4ecf80f0ee334d7d8e" }, "downloads": -1, "filename": "skiplistcollections-0.0.2.tar.gz", "has_sig": false, "md5_digest": "863ce5d29f357720b7c18ded764c7667", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3468, "upload_time": "2013-09-18T06:56:08", "url": "https://files.pythonhosted.org/packages/54/f1/0ab2338275d9f62c9c430b42ede95d4e08b6691eeb6acbaa7bac80911998/skiplistcollections-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "10e489e83aad928cf247bf3f9597dbe3", "sha256": "15fdfb5f7be3ce1c452981b9a2471dab4b84cb671817d53e74cbf2b1ae8ddedb" }, "downloads": -1, "filename": "skiplistcollections-0.0.3-py27-none-any.whl", "has_sig": false, "md5_digest": "10e489e83aad928cf247bf3f9597dbe3", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 5665, "upload_time": "2013-09-19T00:18:41", "url": "https://files.pythonhosted.org/packages/62/1c/80ab03dab9dec08b3b6e13ec817f5fa72a440a2656df4c96eb6ab2ac89a7/skiplistcollections-0.0.3-py27-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6ae603123bac77126fb3cfa3daafa158", "sha256": "f7e9981c94e54fac70ef006384dc4ad0eb0ab80cdb7026759247973f55c450e3" }, "downloads": -1, "filename": "skiplistcollections-0.0.3.tar.gz", "has_sig": false, "md5_digest": "6ae603123bac77126fb3cfa3daafa158", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3798, "upload_time": "2013-09-19T00:16:28", "url": "https://files.pythonhosted.org/packages/df/e4/ce67f1fbfba0336637f3729b26086637f88be853f5b41225b50309019cfd/skiplistcollections-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "9c29e3feebb20c61ba30a86265daf6aa", "sha256": "604f4ae6ab5a3c0716ea0dcf178f8a9ed8ceb60e4c0d46f9e9dce24944ece9c6" }, "downloads": -1, "filename": "skiplistcollections-0.0.4-py27-none-any.whl", "has_sig": false, "md5_digest": "9c29e3feebb20c61ba30a86265daf6aa", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 5868, "upload_time": "2013-09-19T23:32:26", "url": "https://files.pythonhosted.org/packages/50/82/4bf2b0d4d749bf2c98742adc9d7f920033dcce35c3d309c768b872ca84c2/skiplistcollections-0.0.4-py27-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a5c453fe064a7d375e9d3860708d8d54", "sha256": "40531a27e9bdd035f85532d80eea4c5775f97ef53f9b3645c4d473c2f14e55f4" }, "downloads": -1, "filename": "skiplistcollections-0.0.4.tar.gz", "has_sig": false, "md5_digest": "a5c453fe064a7d375e9d3860708d8d54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3947, "upload_time": "2013-09-19T23:32:15", "url": "https://files.pythonhosted.org/packages/26/9e/d34506789c76fef7adc283990912fe5d32dada2226c2c15de934a651ac7e/skiplistcollections-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "5f1c792dd690ec08e9510ebc335f33a7", "sha256": "16cd1361bcbb2137bbf43ff54e67e10ec259d1e59cb6abf81bcde80a26d82878" }, "downloads": -1, "filename": "skiplistcollections-0.0.5-py27-none-any.whl", "has_sig": false, "md5_digest": "5f1c792dd690ec08e9510ebc335f33a7", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 6597, "upload_time": "2013-09-27T22:32:18", "url": "https://files.pythonhosted.org/packages/e0/e2/19bf659a8c0f4d72f5d355afa4f3aeaff85aa01e81243caa6a7a99813fa2/skiplistcollections-0.0.5-py27-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b51afdb115e87fd2a29586f459640edb", "sha256": "f398cbafdc6983ed965bec49e1a8c7087fe171468877a750f3bcc3748a215724" }, "downloads": -1, "filename": "skiplistcollections-0.0.5.tar.gz", "has_sig": false, "md5_digest": "b51afdb115e87fd2a29586f459640edb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4555, "upload_time": "2013-09-27T22:32:08", "url": "https://files.pythonhosted.org/packages/a9/55/dc7818e65db0e80fd1e954a322346919ecbd5ae54221cd0a6b410eb8e1a7/skiplistcollections-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "0e4aa4977d9782decfe6cb801cbfbebc", "sha256": "e4fc2077d2e9fede118efbb27a2a0bd23b789f998b5c62577879793c532594e2" }, "downloads": -1, "filename": "skiplistcollections-0.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0e4aa4977d9782decfe6cb801cbfbebc", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 6873, "upload_time": "2014-01-13T02:01:38", "url": "https://files.pythonhosted.org/packages/06/49/e701126c3af55599d65fd04053676957398a9249d054c9c009cca3eda267/skiplistcollections-0.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0f0909016e62264860a88cce892c6dbd", "sha256": "f7099783b6b521369f44fe6a5320bb951fd567bed61bf914c7f09de61b446387" }, "downloads": -1, "filename": "skiplistcollections-0.0.6.tar.gz", "has_sig": false, "md5_digest": "0f0909016e62264860a88cce892c6dbd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4758, "upload_time": "2014-01-13T02:00:15", "url": "https://files.pythonhosted.org/packages/c9/50/95269ccd2fef8580aa96f32e0a9af558361b1259535ab1c926686ef36d7c/skiplistcollections-0.0.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0e4aa4977d9782decfe6cb801cbfbebc", "sha256": "e4fc2077d2e9fede118efbb27a2a0bd23b789f998b5c62577879793c532594e2" }, "downloads": -1, "filename": "skiplistcollections-0.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0e4aa4977d9782decfe6cb801cbfbebc", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 6873, "upload_time": "2014-01-13T02:01:38", "url": "https://files.pythonhosted.org/packages/06/49/e701126c3af55599d65fd04053676957398a9249d054c9c009cca3eda267/skiplistcollections-0.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0f0909016e62264860a88cce892c6dbd", "sha256": "f7099783b6b521369f44fe6a5320bb951fd567bed61bf914c7f09de61b446387" }, "downloads": -1, "filename": "skiplistcollections-0.0.6.tar.gz", "has_sig": false, "md5_digest": "0f0909016e62264860a88cce892c6dbd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4758, "upload_time": "2014-01-13T02:00:15", "url": "https://files.pythonhosted.org/packages/c9/50/95269ccd2fef8580aa96f32e0a9af558361b1259535ab1c926686ef36d7c/skiplistcollections-0.0.6.tar.gz" } ] }