Skip to main content
Update for py3
Source Link
reubano
  • 5.3k
  • 1
  • 42
  • 42

Simple solution using itertools that preserves order (latter dicts have precedence)

import# py2
from itertools asimport itchain, imap
merge = lambda *args: dict(it.chain.from_iterable(it.imap(dict.iteritems, args)))

# py3
from itertools import chain
merge = lambda *args: dict(chain.from_iterable(map(dict.items, args)))

And it's usage:

>>> x = {'a':1, 'b': 2}
>>> y = {'b':10, 'c': 11}
>>> merge(x, y)
{'a': 1, 'b': 10, 'c': 11}

>>> z = {'c': 3, 'd': 4}
>>> merge(x, y, z)
{'a': 1, 'b': 10, 'c': 3, 'd': 4}

Simple solution using itertools that preserves order (latter dicts have precedence)

import itertools as it
merge = lambda *args: dict(it.chain.from_iterable(it.imap(dict.iteritems, args)))

And it's usage:

>>> x = {'a':1, 'b': 2}
>>> y = {'b':10, 'c': 11}
>>> merge(x, y)
{'a': 1, 'b': 10, 'c': 11}

>>> z = {'c': 3, 'd': 4}
>>> merge(x, y, z)
{'a': 1, 'b': 10, 'c': 3, 'd': 4}

Simple solution using itertools that preserves order (latter dicts have precedence)

# py2
from itertools import chain, imap
merge = lambda *args: dict(chain.from_iterable(imap(dict.iteritems, args)))

# py3
from itertools import chain
merge = lambda *args: dict(chain.from_iterable(map(dict.items, args)))

And it's usage:

>>> x = {'a':1, 'b': 2}
>>> y = {'b':10, 'c': 11}
>>> merge(x, y)
{'a': 1, 'b': 10, 'c': 11}

>>> z = {'c': 3, 'd': 4}
>>> merge(x, y, z)
{'a': 1, 'b': 10, 'c': 3, 'd': 4}
fix formatting
Source Link
reubano
  • 5.3k
  • 1
  • 42
  • 42

Simple solution using itertools that preserves order (latter dicts have precedence)

import itertools as it
merge = lambda *args: dict(it.chain.from_iterable(it.imap(dict.iteritems, args)))

And it's usage:

>>> x = {'a':1, 'b': 2}
>>> y = {'b':10, 'c': 11}
>>> merge(x, y)
 
>>> {'a': 1, 'b': 10, 'c': 11}

>>> z = {'c': 3, 'd': 4}
>>> merge(x, y, z)
 
>>> {'a': 1, 'b': 10, 'c': 3, 'd': 4}

Simple solution using itertools that preserves order (latter dicts have precedence)

import itertools as it
merge = lambda *args: dict(it.chain.from_iterable(it.imap(dict.iteritems, args)))

And it's usage:

x = {'a':1, 'b': 2}
y = {'b':10, 'c': 11}
merge(x, y)
 
>>> {'a': 1, 'b': 10, 'c': 11}

z = {'c': 3, 'd': 4}
merge(x, y, z)
 
>>> {'a': 1, 'b': 10, 'c': 3, 'd': 4}

Simple solution using itertools that preserves order (latter dicts have precedence)

import itertools as it
merge = lambda *args: dict(it.chain.from_iterable(it.imap(dict.iteritems, args)))

And it's usage:

>>> x = {'a':1, 'b': 2}
>>> y = {'b':10, 'c': 11}
>>> merge(x, y)
{'a': 1, 'b': 10, 'c': 11}

>>> z = {'c': 3, 'd': 4}
>>> merge(x, y, z)
{'a': 1, 'b': 10, 'c': 3, 'd': 4}
Convert to a one-liner using lambda
Source Link
reubano
  • 5.3k
  • 1
  • 42
  • 42

Simple solution using itertools that preserves order (latter dicts have precedence)

import itertools as it
 
def merge(*args):
  = lambda return*args: dict(it.chain.from_iterable(it.imap(dict.iteritems, args)))

And it's usage:

x = {'a':1, 'b': 2}
y = {'b':10, 'c': 11}
merge(x, y)

>>> {'a': 1, 'b': 10, 'c': 11}

z = {'c': 3, 'd': 4}
merge(x, y, z)

>>> {'a': 1, 'b': 10, 'c': 3, 'd': 4}

Simple solution using itertools that preserves order (latter dicts have precedence)

import itertools as it
 
def merge(*args):
    return dict(it.chain.from_iterable(it.imap(dict.iteritems, args)))

And it's usage:

x = {'a':1, 'b': 2}
y = {'b':10, 'c': 11}
merge(x, y)

>>> {'a': 1, 'b': 10, 'c': 11}

z = {'c': 3, 'd': 4}
merge(x, y, z)

>>> {'a': 1, 'b': 10, 'c': 3, 'd': 4}

Simple solution using itertools that preserves order (latter dicts have precedence)

import itertools as it
merge = lambda *args: dict(it.chain.from_iterable(it.imap(dict.iteritems, args)))

And it's usage:

x = {'a':1, 'b': 2}
y = {'b':10, 'c': 11}
merge(x, y)

>>> {'a': 1, 'b': 10, 'c': 11}

z = {'c': 3, 'd': 4}
merge(x, y, z)

>>> {'a': 1, 'b': 10, 'c': 3, 'd': 4}
Separate usage from func definition
Source Link
reubano
  • 5.3k
  • 1
  • 42
  • 42
Loading
Source Link
reubano
  • 5.3k
  • 1
  • 42
  • 42
Loading