Python dictionary on steroids. The custom dictionary is inspired in
by the functionalities that pandas offers in
their DataFrame
and Series
classes. Head over to the Quickstart
section for examples of what it can do.
To install Better Dict, execute the command:
$ pip install better-dict
Alternatively, you can also install the package by cloning this repository and performing a local pip install
:
$ git clone https://github.com/erik-ingwersen-ey/better-dict.git
Then, navigate to the cloned repository:
$ cd better-dict
Finally, install the package executing the following command:
$ pip install .
Or, to install it in development mode, include the optional -e
tag to the previous command:
$ pip install -e .
Read the full documentation at Better-dict documentation
Here's a quick example of how to use Better Dict:
import better_dict as bd
d = bd.BetterDict({"a": 1, "b": 2, "c": 3})
# == Accessing values ==========================================================
# Access multiple keys at once:
d[["a", "b"]] # returns {"a": 1, "b": 2}
# Access dictionary values using item indexes:
d.iloc[0] # returns 1
d.iloc[[0, 2]] # returns [1, 3]
d.iloc[1:] # returns [2, 3]
# Access dictionary keys using their values:
d.vloc[1] # returns "a"
d.vloc[[1, 3]] # returns ["a", "c"]
# == Key Translations ==========================================================
# Rename dictionary keys:
d.rename({"a": "A", "b": "B", "c": "C"}) # returns {"A": 1, "B": 2, "C": 3}
# == Apply Function ============================================================
# Apply a function to all dictionary values:
d.apply(lambda x: x + 1) # returns {"a": 2, "b": 3, "c": 4}
# Apply a function to all dictionary keys:
d.apply_keys(lambda x: x.upper(), axis=0) # returns {"A": 1, "B": 2, "C": 3}
# == I/O Operations ============================================================
# Save dictionary to a Pickle file:
d.to_pickle("d.pkl")
# Load dictionary from a Pickle file:
d = bd.BetterDict.from_pickle("d.pkl")
# Save dictionary to a joblib file:
d.to_joblib("d.joblib")
# Load dictionary from a joblib file:
d = bd.BetterDict.from_joblib("d.joblib")
Here are the answers for some common questions about better-dict
that you might have:
The BetterDict
class is a custom subclass of Python's built-in dict class,
designed to provide additional functionality for easier and more flexible
manipulation of dictionaries. The main enhancements include:
- Accessing dictionary keys by value.
- Manipulating dictionary keys and values using index notation.
- Accessing and manipulating dictionary values using dot notation.
- Other features include saving/loading dictionaries to/from files, creating dictionaries from various data structures, applying functions to dictionary values and keys, fuzzy key matching, and renaming dictionary keys.
Accessing and setting values in a BetterDict
instance is made easy through a
variety of methods:
Get
/Set
values by key: Use the standard dictionary syntax with square brackets (e.g.,d["key"]
andd["key"] = value
).- Get/Set multiple values at once: Supply an iterable of keys
(e.g.,
d["key1", "key2"]
andd["key1", "key2"] = value1, value2
). - Index notation: Use the iloc property to access and set values by index
(e.g.,
d.iloc[index]
andd.iloc[index1, index2] = value1, value2
). - Additionally, dot notation can be used to access and set values (e.g.,
d.key
andd.key = value
).
BetterDict
supports I/O operations using the pickle and joblib libraries,
allowing you to easily save and load dictionaries to/from files. The main
methods for I/O operations are:
- Save with pickle: Use the
save_pickle
method, supplying the file path (e.g.,d.save_pickle("file_path.pkl")
). - Load with pickle: Use the
load_pickle
method, supplying the file path (e.g.,d = BetterDict.load_pickle("file_path.pkl"))
. - Save with joblib: Use the
save_joblib
method, supplying the file path (e.g.,d.save_joblib("file_path.joblib")
). - Load with joblib: Use the
load_joblib
method, supplying the file path (e.g.,d = BetterDict.load_joblib("file_path.joblib")
).
4. How can I create a BetterDict
from different data structures like pandas.DataFrame
or numpy.ndarray
?
BetterDict
offers class methods to create instances from various data
structures, such as pandas DataFrames, pandas Series, numpy arrays, and lists:
- From
pandas.DataFrame
: Use thefrom_frame
method (e.g.,d = BetterDict.from_frame(data_frame))
. - From
pandas.Series
: Use thefrom_series
method (e.g.,d = BetterDict.from_series(data_series))
. - From
numpy.ndarray
: No direct method is available, but you can first convert the array to a pandas DataFrame and then usefrom_frame
(e.g.,d = BetterDict.from_frame(pd.DataFrame(array)))
. - From list: Use the
from_list
method (e.g.,d = BetterDict.from_list(list_obj))
.
These methods facilitate easy conversion between different data structures and BetterDict
.
If you want to contribute to Better Dict, please read the Contributor Guide for additional information on how you can contribute to this project.
Distributed under the terms of the MIT License, Better Dict is free and open source software. We do not provide guarantees nor custom support for it, use it at your own risk.