dict2dc - dictionary to dataclass parsing
dict2dc is a small Python library that helps to parse Python dicts to dataclass structures.
E.g., these dicts could originate from JSON deserialization.
The library supports nested dataclasses, collections and union types. It always tries to initiate the best matching class.
🚀 Getting started
Install it in your Python project:
pip install dict2dc # or uv add or poetry add...
💻 Usage Examples
Deserialization/Parsing
import datetime
import dataclasses
from collections.abc import Collection
from dict2dc.dict2dc import Dict2Dc
class MyDataSubClass1:
a: str
@dataclasses.dataclass(frozen=True)
class MyDataSubClass2:
a: int
@dataclasses.dataclass
class MyDataClass:
a: int
b: set[str]
c: Collection[MyDataSubClass1 | MyDataSubClass2] = dataclasses.field(default_factory=list)
d: datetime.datetime | None = None
data = {
"a": 1,
"b": ["Hello", "World"], # JSON does not know sets thus they probably come as list
"c": [{"a": "Hello"}, {"a": 42}],
"d": "2026-01-26T10:33:48.703386",
} # e.g., from json.load() or response.json()
Dict2Dc().from_dict_enforced(data, cls=MyDataClass)
Serialization
JSON
import dataclasses
import json
from dict2dc.dc2json import Dc2Json, DcJsonEncoder
from dict2dc.models.base import UNTOUCHED, UNTOUCHED_TYPE
@dataclasses.dataclass
class MyDataClass:
a: str
b: str | None = None
c: int | UNTOUCHED_TYPE = UNTOUCHED # Unmodified, the key will be omitted in the serializable dict
my_obj: MyDataClass = MyDataClass(a="Hello World")
serializable = Dc2Json().as_serializable(my_obj)
json.dumps(serializable) # {"a": "Hello World", "b": None}
# Alternative
json.dumps(serializable, cls=DcJsonEncoder)
Query Parameters
from dict2dc.dc2query import Dc2Query
my_obj: MyDataClass = MyDataClass(...)
query_params = Dc2Query().as_query_params(my_obj)
requests.get("https://example.com", params=query_params)
🛠️ Advanced Usage
The parsing has some opinionated defaults, e.g., regarding datetime representation. If you want to adjust them or add your own parsing methods, you can pass a mapping from target type to method to the constructor:
import datetime
from dict2dc.dict2dc import Dict2Dc
def convert(v: str) -> datetime.datetime:
return datetime.datetime.fromtimestamp(float(v), tz=datetime.UTC)
dict2dc = Dict2Dc(
special_conversions={
datetime.datetime: convert
}
)
dict2dc.from_dict_enforced(
{
"created": "1769416853"
}, cls=MyDataClass
)
The default conversions can be found in dict2dc.py.
You can also use the optional replace parameter of the constructor to omit the default conversions entirely.
Note: These conversions are currently only triggered if the value to parse is a string.
To adjust the serialization helpers (Dc2Json, DcJsonEncoder, Dc2Query),
you need to create your own subclasses.
There you can override the existing methods or add your own for custom conversions.
Metadata
Release files for dict2dc 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| dict2dc-0.3.0.tar.gz | 72.5 kB | Without provenance | Details for dict2dc-0.3.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| dict2dc-0.3.0-py3-none-any.whl | Python 3 | none | any | Details for dict2dc-0.3.0-py3-none-any.whl |
Total release size: 85.0 kB
Release files / dict2dc-0.3.0.tar.gz
| Download URL | dict2dc-0.3.0.tar.gz |
|---|---|
| Size | 72.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9be27d5460b2dff57939ca117af409c0fb3805ff9f8d7d1b53f5b193a3e2214c
|
|
BLAKE2b-256 checksum How to use checksums |
322fefe8b990c29db91771cccf0c8dbed694e5c1543755ee5f632f6e9c028e99
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.30 {"installer":{"name":"uv","version":"0.11.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / dict2dc-0.3.0-py3-none-any.whl
| Download URL | dict2dc-0.3.0-py3-none-any.whl |
|---|---|
| Size | 12.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b6b5154b15b51fe5a9dcf8626981986e11abe6cea4173cb2861dabf85d94a1c8
|
|
BLAKE2b-256 checksum How to use checksums |
a9e481e1468692840657c67509834d7a97e32e2d34df4b43815353901c056407
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.30 {"installer":{"name":"uv","version":"0.11.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for dict2dc 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.