Skip to main content

A dict that works with both hashable and non-hashable keys

Project description

All Purpose Dict


Table of Contents


What is it?

  • A dict which doesn't require hashable keys

Why create it?

  • I often have a need to store non-hashable keys in a dict. For example storing a dict as a key isn't possible with the builtin dict.

    # doesn't work
    someDict = { "key": "value" }
    anotherDict = { someDict: "anotherValue" }
    

Simple usage

from all_purpose_dict import ApDict

someDict = { "key": "value" }
anotherDict = ApDict([(someDict, "anotherValue")])

print(someDict in anotherDict) # prints True

See Also


Api

Note: This api is young and subject to change quite a bit. There also may be functionality present in the builtin dict which ApDict doesn't cover. I'm willing to add it so please just raise a github issue or PR with details.

class ApDict([a list of pairs])

  • 'pairs' may be either a list or tuple with a length of 2
  • all methods return self unless specified otherwise
  • iterates in the order of insertion
  • views are not implemented because I don't have a need for them. Instead I expose keysIterator and valuesIterator. If you need views then raise a github issue.
  • the internal methods implemented are
    • __contains__
    • __delitem__
    • __getitem__
    • __iter__
    • __len__
    • __setitem__
clear()
delete(key)
  • a function alternative to del aDict[key]
get(key, default=None) => value
  • get the value for key if key is in the dictionary, else default.
  • note: this never raises a KeyError.
has(key) => bool
  • a function alternative to key in aDict
getKeysIterator() => ApDictKeysIterator
set(key, value)
  • a function alternative to aDict[key] = val
getValuesIterator() => ApDictValuesIterator

Test

#
# you must have poetry installed
#
$ poetry shell
$ poetry install
$ python runTests.py

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

all_purpose_dict-0.2.4.tar.gz (178.9 kB view hashes)

Uploaded source

Built Distribution

all_purpose_dict-0.2.4-py3-none-any.whl (209.4 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page