BCDict#

Python dictionary with broadcast support.

README.md

Jupyter Notebook

Full API Documentation

MIT

Tests codecov PyPI version Documentation Status pre-commit Downloads

Broadcast Dictionary#

Python dictionary with broadcast support.

Behaves like a regular dictionary.

Allows to apply operations to all its values at once. Whithout loops, whithout dict comprehension.

Installation#

pip install bcdict

Usage#

from bcdict import BCDict
>>> d = BCDict({"a": "hello", "b": "world!"})
>>> d
{'a': 'hello', 'b': 'world!'}

Regular element access:

>>> d['a']
'hello'

Regular element assignments

>>> d['a'] = "Hello"
>>> d
{'a': 'Hello', 'b': 'world!'}

Calling functions:

>>> d.upper()
{'a': 'HELLO', 'b': 'WORLD!'}

Slicing:

>>> d[1:3]
{'a': 'el', 'b': 'or'}

Applying functions:

>>> d.pipe(len)
{'a': 5, 'b': 6}

When there is a conflict between an attribute in the values and an attribute in BCDict, use the attribute accessor explicitly:

>>> d.a.upper()
{'a': 'HELLO', 'b': 'WORLD!'}

Slicing with conflicting keys:

>>> n = BCDict({1:"hello", 2: "world"})
>>> n[1]
'hello'
>>> # Using the attribute accessor:
>>> n.a[1]
{1: 'e', 2: 'o'}

Next steps#

See the introduction notebook and other examples.

Also check out the full documentation on bcdict.readthedocs.io.

Changelog#

v0.5.0#

  • feature: broadcast attribute and item assignment

  • fix: broadcast slicing with .a accessor

v0.4.3#

  • fix: unpickling causes recursion error

v0.4.2#

  • docs: improve the documenation

v0.4.1#

  • fix: sphinxcontrib-mermaid gets installed as default dependency, should be dev dependency

v0.4.0#

  • new functions eq() and ne() for equality/inequality with broadcast support

v0.3.0#

  • new functions in bcdict package:

    • apply()

    • broadcast()

    • broadcast_arg()

    • broadcast_kwarg()

  • docs: write some documentation and host it on readthedocs

v0.2.0#

  • remove item() function. Use .a[] instead.

v0.1.0#

  • initial release

Original repository: https://github.com/mariushelf/bcdict

Author: Marius Helf (helfsmarius@gmail.com)