Skip to main content

MIDict (Multi-Index Dict) can be indexed by any "keys" or "values", suitable as a bidirectional/inverse dict or a multi-key/multi-value dict (a drop-in replacement for dict in Python 2 & 3).

Project description

License PyPI Release Supported Python versions Documentation Travis Build Status Test coverage Code quality

MIDict is an ordered “dictionary” with multiple indices where any index can serve as “keys” or “values”, capable of assessing multiple values via its powerful indexing syntax, and suitable as a bidirectional/inverse dict (a drop-in replacement for dict/OrderedDict in Python 2 & 3).

Features

  • Multiple indices

  • Multi-value indexing syntax

  • Convenient indexing shortcuts

  • Bidirectional/inverse dict

  • Compatible with normal dict in Python 2 & 3

  • Accessing keys via attributes

  • Extended methods for multi-indices

  • Additional APIs to handle indices

  • Duplicate keys/values handling

Quickstart

name

uid

ip

jack

1

192.1

tony

2

192.2

The above table-like data set (with multiple columns/indices) can be represented using a MIDict:

user = MIDict([['jack', 1, '192.1'], # list of items (rows of data)
               ['tony', 2, '192.2']],
              ['name', 'uid', 'ip']) # a list of index names

Access a key and get a value or a list of values (similar to a normal dict):

user['jack'] == [1, '192.1']

Any index (column) can be used as the “keys” or “values” via the advanced “multi-indexing” syntax d[index_key:key, index_value]. Both index_key and index_value can be a normal index name or an int (the order the index), and index_value can also be a tuple, list or slice object to specify multiple values, e.g.:

user['name':'jack', 'uid'] == 1
user['ip':'192.1', 'name'] == 'jack'

user['name':'jack', ('uid', 'ip')] == [1, '192.1']
user[0:'jack', [1, 2]]             == [1, '192.1']
user['name':'jack', 'uid':]        == [1, '192.1']

The “multi-indexing” syntax also has convenient shortcuts:

user['jack'] == [1, '192.1']
user[:'192.1'] == ['jack', 1]
user['jack', :] == ['jack', 1, '192.1']

A MIDict with 2 indices can be used as a bidirectional/inverse dict:

mi_dict = MIDict(jack=1, tony=2)

mi_dict['jack'] == 1 # forward indexing: d[key] -> value
mi_dict[:1]     == 'jack' # backward/inverse indexing: d[:value] -> key

Documentation

See https://midict.readthedocs.io

Installation

pip install midict

PyPI repository: https://pypi.python.org/pypi/midict

Development

Source code: https://github.com/ShenggaoZhu/midict

Report issues: https://github.com/ShenggaoZhu/midict/issues/new

Testing

python tests/tests.py

Tested with both Python 2.7 and Python 3,3, 3.4, 3.5.

Project details


Download files

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

Source Distribution

midict-0.1.4.tar.gz (16.4 kB view details)

Uploaded Source

File details

Details for the file midict-0.1.4.tar.gz.

File metadata

  • Download URL: midict-0.1.4.tar.gz
  • Upload date:
  • Size: 16.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for midict-0.1.4.tar.gz
Algorithm Hash digest
SHA256 27cdb3116f1fcd8e5291d62ecea5c6de319e5db3d726e93de5c8f00aa172645c
MD5 f19dc249fda538739b61d1dabaf7b17b
BLAKE2b-256 306bd697c05b33da2b8b8330914021c0bedb75a3591839d36b9b912d30c812c0

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