Python dictionary with dot notation.
Project description
Python dictionary with dot notation
- Partially compartible with
python-box
- Issue #87 of
python-box
fixed - Nest conversion of inside
dict/list
turned off - Customization of key conversion
from diot import Diot, NestDiot
movie_data = {
"movies": {
"Spaceballs": {
"imdb stars": 7.1,
"rating": "PG",
"length": 96,
"director": "Mel Brooks",
"stars": [{"name": "Mel Brooks", "imdb": "nm0000316", "role": "President Skroob"},
{"name": "John Candy","imdb": "nm0001006", "role": "Barf"},
{"name": "Rick Moranis", "imdb": "nm0001548", "role": "Dark Helmet"}
]
},
"Robin Hood: Men in Tights": {
"imdb stars": 6.7,
"rating": "PG-13",
"length": 104,
"director": "Mel Brooks",
"stars": [
{"name": "Cary Elwes", "imdb": "nm0000144", "role": "Robin Hood"},
{"name": "Richard Lewis", "imdb": "nm0507659", "role": "Prince John"},
{"name": "Roger Rees", "imdb": "nm0715953", "role": "Sheriff of Rottingham"},
{"name": "Amy Yasbeck", "imdb": "nm0001865", "role": "Marian"}
]
}
}
}
# Box is a conversion_box by default, pass in `conversion_box=False` to disable that behavior
# Explicitly tell Diot to convert dict/list inside
movie_diot = Diot(movie_data, diot_nest = True)
# or movie_diot = NestDiot(movie_data)
movie_diot.movies.Robin_Hood_Men_in_Tights.imdb_stars
# 6.7
movie_diot.movies.Spaceballs.stars[0].name
# 'Mel Brooks'
# Different as box, you have to use Diot for new data in a list
movie_diot.movies.Spaceballs.stars.append(
Diot({"name": "Bill Pullman", "imdb": "nm0000597", "role": "Lone Starr"}))
movie_diot.movies.Spaceballs.stars[-1].role
# 'Lone Starr'
Install
pip install diot
Diot
Instantiated the same ways as dict
Diot({'data': 2, 'count': 5})
Diot(data=2, count=5)
Diot({'data': 2, 'count': 1}, count=5)
Diot([('data', 2), ('count', 5)])
# All will create
# Diot([('data', 2), ('count', 5)], diot_nest = False, diot_transform = 'safe')
Same as python-box
, Diot
is a subclass of dict which overrides some base functionality to make sure everything stored in the dict can be accessed as an attribute or key value.
diot = Diot({'data': 2, 'count': 5})
diot.data == diot['data'] == getattr(diot, 'data')
By default, diot uses a safe transformation to transform keys into safe names that can be accessed by diot.xxx
dt = Diot({"321 Is a terrible Key!": "yes, really"})
dt._321_Is_a_terrible_Key_
# 'yes, really'
Different as python-box
, duplicate attributes are not allowed.
dt = Diot({"!bad!key!": "yes, really", ".bad.key.": "no doubt"})
# KeyError
Use different transform functions:
dt = Diot(oneTwo = 12, diot_transform = 'snake_case')
# or use alias:
# dt = SnakeDiot(oneTwo = 12)
dt.one_two == dt['one_two'] == dt['oneTwo'] == 12
dt = Diot(one_two = 12, diot_transform = 'camel_case')
# or use alias:
# dt = CamelDiot(one_two = 12)
dt.oneTwo == dt['one_two'] == dt['oneTwo'] == 12
dt = Diot(one_two = 12, diot_transform = 'upper')
dt.ONE_TWO == dt['one_two'] == dt['ONETWO'] == 12
dt = Diot(ONE_TWO = 12, diot_transform = 'lower')
dt.one_two == dt['ONE_TWO'] == dt['one_two'] == 12
Use your own transform function:
import inflection
dt = Diot(post = 10, diot_transform = inflection.pluralize)
dt.posts == dt['posts'] == dt['post'] == 10
OrderedDiot
diot_of_order = OrderedDiot()
diot_of_order.c = 1
diot_of_order.a = 2
diot_of_order.d = 3
list(diot_of_order.keys()) == ['c', 'a', 'd']
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
diot-0.0.5.tar.gz
(5.6 kB
view details)
Built Distribution
diot-0.0.5-py3-none-any.whl
(5.2 kB
view details)
File details
Details for the file diot-0.0.5.tar.gz
.
File metadata
- Download URL: diot-0.0.5.tar.gz
- Upload date:
- Size: 5.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/0.12.17 CPython/3.7.1 Linux/4.15.0-1028-gcp
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | de98a0afcc435718b09dfef1350b8c0cf7d65f64b28855874661356cccc79902 |
|
MD5 | fe4f0b8a8335cd1b291465dc4c1934a4 |
|
BLAKE2b-256 | 216f7ba77c101828558dbd6944ccd7d1ce7139d81b2ed3bfb2ad9c1e71f9a2a0 |
File details
Details for the file diot-0.0.5-py3-none-any.whl
.
File metadata
- Download URL: diot-0.0.5-py3-none-any.whl
- Upload date:
- Size: 5.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/0.12.17 CPython/3.7.1 Linux/4.15.0-1028-gcp
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 46daab60eada1457e74b108f5575160430a686b9e889932ea72a3e0a1773dfb3 |
|
MD5 | d8b8eddd94e2146b12ea9f80d1d2d8f5 |
|
BLAKE2b-256 | b8e776f2f3c1750013b313dccc6739ade27ab5d5c6241349366db5593f2191a0 |