Merge 2 list of dictionary based on specific key

General Tech Bugs & Fixes 2 years ago

0 2 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on Bugs & Fixes related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (2)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 2 years ago

 

I need to merge two list of dictionary based on specific keys else need to append

I've generated my list of dictionary using below code and I works as expected by my main problem is when I try to merge two different list, if same key found then I need to append that value based on the dictionary key.

feed_mapping = {'BC': 11, 'HA':12, 'AB':16,'GR':18}
L = ["AB-24519152","BC-24519152"]

years_dict = dict()
l1 = []
for line in L:
    feed_id = feed_mapping[line.split('-')[0]]
    if feed_id in years_dict:
        # append the new number to the existing array at this slot
        years_dict[feed_id].append(line)
    else:
        # create a new array in this slot
        years_dict[feed_id] = [line]


for element,values in years_dict.items():
    l1.append({"id":values,"feed":element})


print(l1)


l1=  [{'id': ['AB-23473427','AB-99999'], 'feed': 16}, {'id': ['HA-4848231'], 'feed': 12}]
l2 = [{'id': ['AB-23473427'], 'feed': 14}, {'id': ['HA-4848231'], 'feed': 12}]

Expected Output:

[{'id': ['AB-23473427','AB-99999'], 'feed': 16}, {'id': ['HA-4848231','HA-4848231'], 'feed': 12},{'id': ['AB-23473427'], 'feed': 14}]
profilepic.png
manpreet 2 years ago

You should utilize the data-structure that was better suited to this task, which is essentially your own years_dict.

from collections import defaultdict
l1=  [{'id': ['AB-23473427','AB-99999'], 'feed': 16}, {'id': ['HA-4848231'], 'feed': 12}]
l2 = [{'id': ['AB-23473427'], 'feed': 14}, {'id': ['HA-4848231'], 'feed': 12}]

temp = defaultdict(list) 

for i in l1:
    temp[i['feed']].extend(i['id'])

for i in l2:
    temp[i['feed']].extend(i['id'])

#Notice that temp is essentially same as years_dict, but with information of both lists
result = [{"id":v,"feed":k} for k,v in temp.items()]
#Output:
[{'id': ['AB-23473427', 'AB-99999'], 'feed': 16},
 {'id': ['HA-4848231', 'HA-4848231'], 'feed': 12},
 {'id': ['AB-23473427'], 'feed': 14}]

So, while this code works, my recommendation would be keeping your years_dict for all lists instead, and only converting it to the final output at the end.


0 views   0 shares

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.