Skip to main content

Plucking (deep) keys/paths safely from python collections has never been easier.

Project description

plucky.pluck enables you to safely extract several-levels deep values by using a concise selector comprised of dictionary-like keys and list-like indices. Slices over list items are also supported.

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, merge

pluck(obj, 'selector.*.path.2')

merge({"x": 1, "y": 0}, {"x": 2})

Examples

obj = {
    'users': [{
        'uid': 1234,
        'name': {
            'first': 'John',
            'last': 'Smith',
        }
    }, {
        'uid': 2345,
        'name': {
            'last': 'Bono'
        }
    }]
}

pluck(obj, 'users.1.name')
# -> {'last': 'Bono'}

pluck(obj, 'users.*.name.last')
# -> ['Smith', 'Bono']

pluck(obj, 'users.*.name.first')
# -> ['John']

More Examples! :)

pluck([1,2,3], '2')
# -> 3

pluck([1,2,3], '-1')
# -> 3

pluck([1,2,3], '*')
# -> [1,2,3]

pluck([1,2,3], '-2:')
# -> [2,3]

pluck([1,2,3], '::-1')
# -> [3,2,1]

pluck([1, {'val': 2}, 3], '*.val')
# -> [2]

pluck([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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

plucky-0.3.2.tar.gz (4.4 kB view hashes)

Uploaded Source

Built Distribution

plucky-0.3.2-py2.py3-none-any.whl (5.4 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page