Skip to main content

A lightweight library to perform deep merges of python dictionaries

Project description

DeepMerge

build status release status MIT license coverage status

pypi version pypi python versions supported pypi downloads

A lightweight python package for performing deep-merges of python dictionaries

Installation

Install this package with pip!

$ pip install pydeepmerge

To install this package from source, clone the repo and run:

$ pip install .

If you would like to develop, remember to install the extras.

# for bash
$ pip install -e .[test,dev]
# for zsh
$ pip install -e .\[test,dev\]

Usage

Usage is simple:

from pydeepmerge import deep_merge

> some_data = {'foo': {'bar': 'baz', 'spam': 'eggs'}, 'ham': 'eggs'}
> more_data = {'spam': {'eggs': 'ham'}, 'foo': {'baz': 'bar', 'bar': 'foo'}}
> deep_merge(some_data, more_data)
{'foo': {'bar': 'foo', 'baz': 'bar', 'spam': 'eggs'}, 'spam': {'eggs': 'ham'}, 'ham': 'eggs'}

pydeepmerge also allows users to specify their own merge strategy function. By default, it uses the function prefer_right.

A merge strategy is any function that can accept exactly two inputs. The output of the merge strategy function should be what the merge result between two values should be.

When writing your own merge strategy function, keep in mind that if the key does not exist on the left-hand mapping, the value Key.NoKeyFound will be passed to the first parameter of the function. This is done deliberately so the user can determine if they want to do special behaviour if it is the first occurrence of the key in the sequence of dictionaries.

An example of a merge strategy function can be found below:

from pydeepmerge import deep_merge
from pydeepmerge.types import Key
from typing import Mapping

def pick_shallower(left_value, right_value):
    if left_value is Key.NoKeyFound:
        return right_value

    if isinstance(right_value, Mapping):
        if not isinstance(left_value, Mapping):
            return left_value
        return deep_merge(left_value, right_value)

    return right_value

The deep_merge function does not mutate any mapping but instead creates a new dictionary.

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

pydeepmerge-0.2.2b5.post7.tar.gz (3.9 kB view details)

Uploaded Source

Built Distribution

pydeepmerge-0.2.2b5.post7-py3-none-any.whl (6.0 kB view details)

Uploaded Python 3

File details

Details for the file pydeepmerge-0.2.2b5.post7.tar.gz.

File metadata

  • Download URL: pydeepmerge-0.2.2b5.post7.tar.gz
  • Upload date:
  • Size: 3.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pydeepmerge-0.2.2b5.post7.tar.gz
Algorithm Hash digest
SHA256 91edb5f5fdbfe97afe52a4156c69c1c69ce3380b1298a581732d00d7f6485da9
MD5 e7e8c9f6fea90b75043cb8a68872d222
BLAKE2b-256 3b1cd5e500fc0e9b6b2299c0eb33a141374344ee1ce3049f4c152813405d1ffd

See more details on using hashes here.

File details

Details for the file pydeepmerge-0.2.2b5.post7-py3-none-any.whl.

File metadata

  • Download URL: pydeepmerge-0.2.2b5.post7-py3-none-any.whl
  • Upload date:
  • Size: 6.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pydeepmerge-0.2.2b5.post7-py3-none-any.whl
Algorithm Hash digest
SHA256 9b3fd4acade6d442f8d70b7394718d93998618cec825066be5f9925b020ea133
MD5 beb8e0faf0d0b0aeb14ef81e03fc80a7
BLAKE2b-256 173038d556c930e97a1d37e0b1e080710a7042f91073940620b4b1d730f2b426

See more details on using hashes here.

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