# Accessor: read nested dictionaries
Build accessor functions using the natural python dot notation.
# Installation
``python-accessor`` is available as a zero-dependency Python package. Install with:
$ pip install python-accessor
## Usage
```python
from accessor import accessor as _
name = _.users.name
name(obj) # equivalent of obj['users']['name']
```
## Examples
```python
from accessor import accessor as _
obj = {
'users': [{
'uid': 1234,
'name': {
'first': 'John',
'last': 'Smith',
}
}, {
'uid': 2345,
'name': {
'last': 'Bono'
}
}, {
'uid': 3456
}]
}
_.users[1].name(obj)
# -> {'last': 'Bono'}
_.users.name.last(obj)
# -> ['Smith', 'Bono', None]
_.users.name.first(obj)
# -> ['John', None, None]
_.users.name.first[:1](obj)
# -> ['John']
_.users.uid[:2](obj)
# -> [1234, 2345]
list(map(_.name.last, obj['users']))
# -> ['Smith', 'Bono', None]
list(filter(_.uid > 300, obj['users']))
# -> [{'uid': 3456}]
```
## More Examples! :)
```python
from accessor import accessor as _, select, values
# extract values
list(map(values(_.name.first, _.name.last), obj['users']))
# -> [('John', 'Smith'), (None, 'Bono'), (None, None)]
# extract as dicts
list(map(select(_.name.first, _.name.last),obj['users']))
# -> [{'first': 'John', 'last': 'Smith'}, {'first': None, 'last': 'Bono'}, {'first': None, 'last': None}]
# extract and optionally rename
list(map(select(_.name.uid, x=_.name.last),obj['users']))
# -> [{'uid': '1234', 'x': 'Smith'}, {'uid': 2345, 'x': 'Bono'}, {'uid': 3456, 'x': None}]
```
Raw data
{
"_id": null,
"home_page": null,
"name": "python-accessor",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "accessor, api, itemgetter, rest",
"author": null,
"author_email": "Jakub Jagielka <jjagielka@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/82/3a/f07b178d10a84e34387b46bda42359085f50384254151256291c8c0b5412/python_accessor-1.0.0.tar.gz",
"platform": null,
"description": "# Accessor: read nested dictionaries\n\nBuild accessor functions using the natural python dot notation.\n\n# Installation\n\n``python-accessor`` is available as a zero-dependency Python package. Install with:\n\n $ pip install python-accessor\n\n\n## Usage\n\n```python\n\n from accessor import accessor as _\n\n name = _.users.name \n name(obj) # equivalent of obj['users']['name']\n```\n\n## Examples\n\n```python\n\nfrom accessor import accessor as _\n\nobj = {\n 'users': [{\n 'uid': 1234,\n 'name': {\n 'first': 'John',\n 'last': 'Smith',\n }\n }, {\n 'uid': 2345,\n 'name': {\n 'last': 'Bono'\n }\n }, {\n 'uid': 3456\n }]\n}\n\n_.users[1].name(obj)\n# -> {'last': 'Bono'}\n\n_.users.name.last(obj)\n# -> ['Smith', 'Bono', None]\n\n_.users.name.first(obj)\n# -> ['John', None, None]\n\n_.users.name.first[:1](obj)\n# -> ['John']\n\n_.users.uid[:2](obj)\n# -> [1234, 2345]\n\nlist(map(_.name.last, obj['users']))\n# -> ['Smith', 'Bono', None]\n\nlist(filter(_.uid > 300, obj['users']))\n# -> [{'uid': 3456}]\n```\n\n## More Examples! :)\n\n```python\n\nfrom accessor import accessor as _, select, values\n\n# extract values\nlist(map(values(_.name.first, _.name.last), obj['users']))\n# -> [('John', 'Smith'), (None, 'Bono'), (None, None)]\n\n# extract as dicts\nlist(map(select(_.name.first, _.name.last),obj['users']))\n# -> [{'first': 'John', 'last': 'Smith'}, {'first': None, 'last': 'Bono'}, {'first': None, 'last': None}]\n\n# extract and optionally rename\nlist(map(select(_.name.uid, x=_.name.last),obj['users']))\n# -> [{'uid': '1234', 'x': 'Smith'}, {'uid': 2345, 'x': 'Bono'}, {'uid': 3456, 'x': None}]\n\n```\n",
"bugtrack_url": null,
"license": null,
"summary": "Access nested dicts",
"version": "1.0.0",
"project_urls": {
"Homepage": "https://github.com/jjagielka/python-accessor",
"Issues": "https://github.com/jjagielka/python-accessor/issues",
"Repository": "https://github.com/jjagielka/python-accessor"
},
"split_keywords": [
"accessor",
" api",
" itemgetter",
" rest"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "2978f354d4e171abf56b14fbd8a46580a2304eca139c2406d55dc10c042e256f",
"md5": "c895d90fa53d81c4237349b07b95fd17",
"sha256": "36ffa61db7b2262cb336387917bf8ffd21b316d4520c8debf5cb318c236e3c13"
},
"downloads": -1,
"filename": "python_accessor-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c895d90fa53d81c4237349b07b95fd17",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 4918,
"upload_time": "2025-09-07T11:09:58",
"upload_time_iso_8601": "2025-09-07T11:09:58.106798Z",
"url": "https://files.pythonhosted.org/packages/29/78/f354d4e171abf56b14fbd8a46580a2304eca139c2406d55dc10c042e256f/python_accessor-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "823af07b178d10a84e34387b46bda42359085f50384254151256291c8c0b5412",
"md5": "ff7b365155cd69d2c36a2a8714962151",
"sha256": "1c180697ccbab12b764727072ce8613e7ed1b897b374be72aaae345827404df2"
},
"downloads": -1,
"filename": "python_accessor-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "ff7b365155cd69d2c36a2a8714962151",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 8069,
"upload_time": "2025-09-07T11:09:59",
"upload_time_iso_8601": "2025-09-07T11:09:59.393855Z",
"url": "https://files.pythonhosted.org/packages/82/3a/f07b178d10a84e34387b46bda42359085f50384254151256291c8c0b5412/python_accessor-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-07 11:09:59",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "jjagielka",
"github_project": "python-accessor",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "python-accessor"
}