A Python dict that supports attribute-style access as well as hierarchical keys, JSON serialization, ZIP compression, and more.
Project description
objict
objict is a Python library that extends the standard dictionary to allow attribute-style access, hierarchical keys, and additional functionalities like JSON/XML serialization, delta comparison, and more. It's inspired by the uberdict library.
Installation
To install objict, use the following pip command:
pip install pyobjict
Features
- Attribute Access: Access dictionary values using dot notation (e.g.,
d.key). - Hierarchical Keys: Seamlessly handle nested dictionary structures with keys like
a.b.c. - Serialization: Convert to/from JSON, XML, and ZIP formats.
- File Operations: Read from and write to files conveniently.
- Delta Comparison: Compute differences between two
objicts. - Resilient Missing Keys: Returns
Noneinstead of raising an error for missing attributes. - Type Safety and Conversion: Supports type-safe fetching of values.
Basic Usage
from objict import objict
# Creating an objict
d1 = objict(name="John", age=24)
print(d1.name) # Output: John
print(d1["age"]) # Output: 24
# Adding new attributes
d1.gender = "male"
print(d1.gender) # Output: male
# Nested objict
d2 = objict(user=d1)
print(d2.user.name) # Output: John
Advanced Usage
Hierarchical Keys
d3 = objict()
d3.set("address.street", "123 Elm St")
print(d3.address.street) # Output: 123 Elm St
Serialization
JSON
json_data = d1.to_json(as_string=True, pretty=True)
print(json_data)
XML
xml_data = d1.to_xml()
print(xml_data)
ZIP Compression
zip_data = d1.to_zip(as_string=True)
File Operations
d1.save("data.json")
d3 = objict.from_file("data.json")
print(d3) # Reconstructed objict from file
Delta Comparison
d4 = objict(name="John", age=25)
changes = d1.changes(d4)
print(changes) # Output: {'age': 25}
Type Safety and Conversion
dob = d1.get_typed("dob", typed=datetime.datetime)
Handling Missing Keys and Defaults
print(d1.unknown_key) # Output: None
d1.setdefault("country", "USA")
print(d1.country) # Output: USA
Utility Methods
- to_json(): Convert
objictto JSON. - to_xml(): Convert
objictto XML. - to_zip(): Compress
objict. - from_json(json_string): Create
objictfrom JSON. - from_file(path): Load
objictfrom a file. - copy(shallow=True): Create a copy of the
objict. - extend(*args, **kwargs): Merge another dictionary into this
objict.
Conclusion
objict is a versatile tool for developers who want more flexible dictionary operations in Python. Whether you're dealing with nested data, performing file I/O, or converting data formats, objict simplifies these tasks with a clean and Pythonic interface.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyobjict-2.1.2.tar.gz.
File metadata
- Download URL: pyobjict-2.1.2.tar.gz
- Upload date:
- Size: 10.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.12.10 Darwin/24.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dddfd5ed5efb72612036292b28497260e753ff0799ea9e6742226ed45f406c44
|
|
| MD5 |
3b9f62852e65a151245ce59d523e471b
|
|
| BLAKE2b-256 |
215590bcc97ee58cae0dd37a984f706b62780a70afe5552c030e430cf6c0ed3e
|
File details
Details for the file pyobjict-2.1.2-py3-none-any.whl.
File metadata
- Download URL: pyobjict-2.1.2-py3-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.12.10 Darwin/24.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b547ed1fe770d697f4f4a2cbbbcee7324f707b76a00313021f02e02dcbf1443
|
|
| MD5 |
a90e256c52903b56dd2c682a87706637
|
|
| BLAKE2b-256 |
680dfb8a2b997ed67a8b3575874506d24913e218b4369493e3f9e2cc20ce8b1a
|