A container for dicts of sets - alternative to dictset
Project description
This package provides a collection that is basically a “dict of sets”, named MetaSet.
Links
Package on PyPI: http://pypi.python.org/pypi/metaset/
Source on GitHub: http://github.com/Polyconseil/metaset/
Build on Travis CI: http://travis-ci.org/polyconseil/metaset/
Quickstart
Install the package from PyPI, using pip:
pip install metaset
Or from GitHub:
git clone git://github.com/Polyconseil/metaset.git
Import it in your code:
>>> from metaset import MetaSet
Usage is quite straight forward, basic set operations are supported via the binary operators + - | ^.
>>> from pprint import pprint
>>> pprint(MetaSet(a={1, 2}, b={3}) | MetaSet(b={4}, c={5}))
{'a': {1, 2}, 'b': {3, 4}, 'c': {5}}
Django Postgres
A custom Django field is available. It is quite straightforward:
>>> from metaset.django_field import MetaSetField
>>> from django.db import models # doctest: +SKIP
>>> class MyModel(models.Model): # doctest: +SKIP
mset = MetaSetField() # doctest: +SKIP
The following versions of Python and Django are supported:
Python 2.7, 3.6, 3.7 and 3.8;
Django 1.11, 2.0, 2.1, 2.2, 3.0 and 3.1.
Detailed considerations
They are two ways to consider the “dict of sets” notion, differing on how you handle the empty values for keys.
The easiest idea is to consider that a key with no content is non-existent. This is how the dictset package is implemented.
In this alternative implementation, we chose to keep the empty keys as meaningful elements, allowing for smart unions and intersections.
>>> pprint(MetaSet(a={1}) | MetaSet(a={2}, b=set()))
{'a': {1, 2}, 'b': set()}
>>> MetaSet(a={1}) & MetaSet(a={2}, b={3})
{'a': set()}
So, beware of how empty-keys are handled, and consider using dictset if it is a better match for your use case. The behavior for subtraction and symmetric difference, although sound on a mathematical point of view, may not be what you want.
>>> MetaSet(a={1}) - MetaSet(a={1})
{'a': set()}
>>> MetaSet(a={1}) ^ MetaSet(a={1})
{'a': set()}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file metaset-2.0.0.tar.gz
.
File metadata
- Download URL: metaset-2.0.0.tar.gz
- Upload date:
- Size: 5.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/4.0.2 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a435189e355a009d6f584748fa45c2084902c8f6d734d5e83d66c786e7f90f00 |
|
MD5 | 98c559c666f52d5e704765ae605941b4 |
|
BLAKE2b-256 | d4944d409dae3d4fc2d5c583265fd00bf9857a45a5afe45aba49e307102d3157 |
File details
Details for the file metaset-2.0.0-py3-none-any.whl
.
File metadata
- Download URL: metaset-2.0.0-py3-none-any.whl
- Upload date:
- Size: 5.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/4.0.2 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | faa8f8472b92e5838ad83b63a698d01eec0b2c95c18a49ad8d26b6d369e0b1c2 |
|
MD5 | d4bc7f84a1289c0de30a4b76aa98fbff |
|
BLAKE2b-256 | 67050d7c1685aaad761aa7476eae675bcd0c86bd102ae44c292e3417945fd9a0 |