I want to combine multiple dictionary lists in Python.

Asked 2 years ago, Updated 2 years ago, 22 views

Merge dictionaries for two dictionary lists with common key id
I would like to find the expected value instead of processing the key that does not exist on one side.

a=[{'id':1,'add':'add'}, {'id':3,'add':'add'}]
b = [{'id':1,'name':'aaa'}, {'id':2,'name':'bb'}, {'id':3,'name':'cc'}]

Expected Value

c=[{'id':1,'name':'aaa','add':'add'},{'id':2,'name':'bb'},{'id':3,'name':'cc','add':'add'}]

python

2022-09-30 20:13

3 Answers

The following is how to use setdefault().

d={}
for item in (a+b):
  d.setdefault(item['id'], {}).update(item)
c=list(d.values())

print(c)
=>
[{'id':1,'add':'add','name':'aa'},
 {'id':2,'name':'bb'},
 {'id':3,'add':'add','name':'cc'}]


2022-09-30 20:13

Use python groupby and dictionary update.

 from ittertools import groupby
a = [{'id':1,'add':'add'}, {'id':3,'add':'add'}]
b = [{'id':1,'name':'aaa'}, {'id':2,'name':'bb'}, {'id':3,'name':'cc'}]

ab = a + b
ab.sort (key=lambdax:x ['id'])
c=[ ]
fork,gin groupby(ab,key=lambdax:x['id']):
    d=dict()
    Forging:
        d. update(i) 
    c.append(d)

Run Results

[{'id':1,'add':'add','name':'aaa'},{'id':2,'name':'bb'},{'id':3,'add':'add','name':'cc'}]


2022-09-30 20:13

I think there's a cleaner way to do it, but I can do this as a sample:

import copy

a = [{'id':1,'add':'add'}, {'id':3,'add':'add'}]
b = [{'id':1,'name':'aaa'}, {'id':2,'name':'bb'}, {'id':3,'name':'cc'}]


# Convert to dict for simple id keys
a_dict={d['id']:d for d in a}
b_dict={d['id']:d for d in b}

c=copy.copy(a_dict)

all_keys = set(c.keys()) .union(set(b_dict.keys()))
for entry_id in all_keys:
    if entry_id inc:
        c[entry_id].update(b_dict[entry_id])
    else:
        c[entry_id] = b_dict[entry_id]


Output:

{1:{'id':1,'add':'add','name':'aaa'},
3:{'id':3,'add':'add','name':'cc'},
2:{'id':2,'name':'bbb'}}

If you want it to be a list,

c=list(c.values())

Output:

[{'id':1,'add':'add','name':'aaa'},
{'id':3,'add':'add','name':'cc'},
{'id':2,'name':'bbb'}]


2022-09-30 20:13

If you have any answers or tips


© 2024 OneMinuteCode. All rights reserved.