Skip to content

DeveloperRSquared/case-insensitive-dict

Repository files navigation

Case Insensitive Dict

Typed Python Case Insensitive Dictionary

Publish

Python 3.7+ PyPI - License PyPI - Version

CodeQL codecov pre-commit.ci status

Imports: isort Code style: black Checked with mypy

Install

Install and update using pip.

$ pip install -U case-insensitive-dictionary

API Reference

Method Description
clear() Removes all elements from the dictionary.
copy() Returns a copy of the dictionary.
get(key, default) Returns the value (case-insensitively), of the item specified with the key.
Falls back to the default value if the specified key does not exist.
getkey(key) Returns the original case-sensitive key using a case-insensitive search.
fromkeys(iterable, value) Returns a dictionary with the specified keys and the specified value.
keys() Returns the dictionary's keys.
values() Returns the dictionary's values.
items() Returns the key-value pairs.
pop(key) Remove the specified item (case-insensitively).
The value of the removed item is the return value.
popitem() Remove the last item that was inserted into the dictionary.
For Python version <3.7, popitem() removes a random item.

Example

CaseInsensitiveDict:

>>> from typing import Union

>>> from case_insensitive_dict import CaseInsensitiveDict

>>> case_insensitive_dict = CaseInsensitiveDict[Union[str, int], str](data={"Aa": "b", 1: "c"})
>>> case_insensitive_dict["aa"]
'b'
>>> case_insensitive_dict[1]
'c'
>>> case_insensitive_dict.getkey("aa")
'Aa'

which also supports json encoding/decoding:

>>> import json

>>> from case_insensitive_dict import CaseInsensitiveDict, CaseInsensitiveDictJSONEncoder, case_insensitive_dict_json_decoder

>>> case_insensitive_dict = CaseInsensitiveDict[str, str](data={"Aa": "b"})
>>> json_string = json.dumps(obj=case_insensitive_dict, cls=CaseInsensitiveDictJSONEncoder)
>>> json_string
'{"Aa": "b"}'

>>> case_insensitive_dict = json.loads(s=json_string, object_hook=case_insensitive_dict_json_decoder)
>>> case_insensitive_dict
CaseInsensitiveDict({'Aa': 'b'})

Contributing

Contributions are welcome via pull requests.

First time setup

$ git clone git@github.com:DeveloperRSquared/case-insensitive-dict.git
$ cd case-insensitive-dict
$ poetry install
$ poetry shell

Tools including black, mypy etc. will run automatically if you install pre-commit using the instructions below

$ pre-commit install
$ pre-commit run --all-files

Running tests

$ poetry run pytest

Links