Plucking (deep) keys/paths safely from python collections has never been easier.
Project description
plucky.pluckable happily wraps any Python object and allows for chained soft plucking with attribute- and item- getters (e.g. .attr, ["key"], [idx], [::2], or a combination: ["key1", "key2"], and [0, 3:7, ::-1]; even: ["length", 0:5, 7]).
plucky.pluck will allow you to pluck same as with pluckable (regarding the plucking operations), but accepting a string selector instead of a Python expression.
plucky.plucks enables you to safely extract several-levels deep values by using a concise string selector comprised of dictionary-like keys and list-like indices/slices. Stands for pluck simplified, since it supports only a subset of pluck syntax. It’s simpler and a more efficient.
plucky.merge facilitates recursive merging of two data structures, reducing leaf values with the provided binary operator.
Installation
plucky is available as a zero-dependency Python package. Install with:
$ pip install plucky
Usage
from plucky import pluck, plucks, pluckable, merge
pluckable(obj).users[2:5, 10:15].name["first", "middle"].value
pluck(obj, 'users[2:5, 10:15].name["first", "middle"]')
plucks(obj, 'users.2:5.name.first')
merge({"x": 1, "y": 0}, {"x": 2})
Examples
obj = {
'users': [{
'uid': 1234,
'name': {
'first': 'John',
'last': 'Smith',
}
}, {
'uid': 2345,
'name': {
'last': 'Bono'
}
}, {
'uid': 3456
}]
}
plucks(obj, 'users.1.name')
# -> {'last': 'Bono'}
plucks(obj, 'users.name.last')
# -> ['Smith', 'Bono']
plucks(obj, 'users.*.name.first')
# -> ['John']
pluckable(obj).users.name.first.value
# -> ['John']
pluckable(obj).users.uid[0, 2, 1].value
# -> [1234, 3456, 2345]
pluckable([datetime.datetime.now(), None, {'month': 8}])[::2].month
# -> [5, 8]
pluckable(obj, skipmissing=False, default='Unnamed').users.name.first.value
# -> ['John', 'Unnamed', 'Unnamed']
More Examples! :)
pluckable(obj).users[:, ::-1].name.last.value
# -> ['Smith', 'Bono', 'Bono', 'Smith']
pluckable(obj).users[:, ::-1].name.last[0, -1].value
# -> ['Smith', 'Smith']
pluck(obj, 'users[:, ::-1].name.last[0, -1]')
# -> ['Smith', 'Smith']
plucks([1, {'val': 2}, 3], 'val')
# -> [2]
plucks([1, {'val': [1,2,3]}, 3], '1.val.-1')
# -> 3
merge({"x": 1, "y": 0}, {"x": 2})
# -> {"x": 3, "y": 0}
merge({"a": [1, 2], "b": [1, 2]}, {"a": [3, 4], "b": [3]})
# -> {"a": [4, 6], "b": [1, 2, 3]}
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
File details
Details for the file plucky-0.4.3.tar.gz
.
File metadata
- Download URL: plucky-0.4.3.tar.gz
- Upload date:
- Size: 8.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: Python-urllib/3.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5bc75d43ae6b40f1b7ba42000b37e4934fa6bd2d6a6cd4e47461f803a404c194 |
|
MD5 | b91764b23264d7ae5d8109f9db0628f6 |
|
BLAKE2b-256 | 4f4ea2d3157ec7031ea3ccc313400db27b92a65a9c002396a709e7457626f7ad |
File details
Details for the file plucky-0.4.3-py2.py3-none-any.whl
.
File metadata
- Download URL: plucky-0.4.3-py2.py3-none-any.whl
- Upload date:
- Size: 10.6 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: Python-urllib/3.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a358878f3e45b5e51d0b4e5b5c89d704422a72c2cf8ee9aaf9acedfa53f89105 |
|
MD5 | cbb5b73fadd4a0921db6f96957c65ee1 |
|
BLAKE2b-256 | d8707b43e7280284bafecb345f4edb3eea7042cf0d089c5d112920eda650fda5 |