Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def merge(dict1, dict2, func=None):
- """
- update dict1 with key/value pairs in dict2. If they have keys in common,
- merge the respective values.
- :param dict1: dict to be updated
- :param dict2: dict to add to dict1
- :param func: function taking two values and returning a new value.
- :return: None. merge is done in-place.
- >>> d1 = {'roberto': 28, 'chris': 12, 'evan': 121}
- >>> d2 = {'roberto': 3, 'chris': 25, 'epifanio': 350}
- >>> from operator import add
- >>> merge(d1, d2, add)
- >>> d1
- {'chris': 37, 'evan': 121, 'roberto': 31, 'epifanio': 350}
- """
- if func is None:
- dict1.update(dict2)
- else:
- for k in dict2:
- if k in dict1:
- dict1[k] = func(dict1[k], dict2[k])
- else:
- dict1[k] = dict2[k]
- def merged(dict1, dict2, func=None):
- """
- Merge two dicts as in merge, and return the merged dict. Does not
- mutate the original dicts.
- :param dict1: dict
- :param dict2: dict
- :param func: merge function that takes two arguments and returns a value
- :return: merged dict
- >>> d1 = {'robert': 28, 'chrisse': 12, 'evan': 121}
- >>> d2 = {'robert': 3, 'chrisse': 25, 'epifanio': 350}
- >>> from operator import add
- >>> merged(d1, d2, add)
- {'robert': 31, 'evan': 121, 'chrisse': 37, 'epifanio': 350}
- """
- d = dict1.copy()
- if func is None:
- d.update(dict2)
- else:
- for k in dict2:
- if k in d:
- d[k] = func(d[k], dict2[k])
- else:
- d[k] = dict2[k]
- return d
- if __name__ == '__main__':
- import doctest
- doctest.testmod()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement