Combine or merge dictionaries based on more than one key or multi keys

后端 未结 2 1717
野趣味
野趣味 2020-12-19 16:24

I\'ve been searching all morning but most examples of merging was based on only one key, I couldn\'t find anything on multiple keys.

x = [
    {\'pid\':111,          


        
相关标签:
2条回答
  • 2020-12-19 16:47

    Here is an alternative using 3rd party library pandas, which accepts a list of dictionaries.

    import pandas as pd
    
    # merge data
    merged = pd.DataFrame(x).merge(pd.DataFrame(y), how='outer')
    
    # iterate, remove nan, convert to int
    res = [s.dropna().astype(int).to_dict() for _, s in merged.iterrows()]
    
    [{'eid': 123, 'pid': 111, 'sid': 6, 'x_qty': 30, 'y_qty': 123},
     {'eid': 6212, 'pid': 222, 'sid': 56, 'x_qty': 2},
     {'eid': 6212, 'pid': 333, 'sid': 56, 'y_qty': 112}]
    
    0 讨论(0)
  • 2020-12-19 16:51

    This is re-keying off a tuple:

    >>> from operator import itemgetter
    >>> from collections import defaultdict
    >>> data = defaultdict(dict)
    >>> f = itemgetter('pid', 'sid', 'eid')
    >>> for d in [*x, *y]:
    ...     data[f(d)].update(d)
    ...     
    >>> list(data.values())
    [{'eid': 123, 'pid': 111, 'sid': 6, 'x_qty': 30, 'y_qty': 123},
     {'eid': 6212, 'pid': 222, 'sid': 56, 'x_qty': 2},
     {'eid': 6212, 'pid': 333, 'sid': 56, 'y_qty': 112}]
    
    0 讨论(0)
提交回复
热议问题