Home > Net >  Merge Two python Lists with a condition
Merge Two python Lists with a condition

Time:02-01

I have two list Activities and Projects. I want to merge them such that I will be able to loop over the merged list. So now the merged list Appication but I want to merge them in such a way that I will be able to loop through it and check if it's activities or projects and then choose it's fields. How do I do that?

Activities

[{'status': 'Applied','activity_name': 'Aasd','duration_days': 15,
  'time_commitment': 10},{'status': 'Applied','activity_name': 'Marathon', 'duration_days': 3,'time_commitment': 3}]

Projects
[{'application_status': '101','chezuba_project': '4','picture': 'projectimage-04.jpg','duration': 4,'time_commitment': 6},{'application_status': '103','chezuba_project': '2','picture': 'projectimage-04.jpg','duration': 3,'time_commitment': 2}]


Applications = Activities   Projects
['acitivities':[{'status': 'Applied','activity_name': 'Aasd','duration_days': 15,'time_commitment': 10},{'status': 'Applied','activity_name': 'Marathon', 'duration_days': 3,'time_commitment': 3}]
 {'application_status': '101','chezuba_project': '4','picture': 'projectimage-04.jpg','duration': 4,'time_commitment': 6}],
'projects':[{'application_status': '101','chezuba_project': '4','picture': 'projectimage-04.jpg','duration': 4,'time_commitment': 6},{'application_status': '103','chezuba_project': '2','picture': 'projectimage-04.jpg','duration': 3,'time_commitment': 2}]



CodePudding user response:

You could turn your Activity and Project dictionaries into dataclasses, and then use isinstance(item, Activity) while looping over items in the Applications list.

In general, dictionaries for such applications are okay, but sooner or later it's nice be able to use the full object-oriented power of Python.

I assume that your frappe tag isn't really relevant here, by the way. If you really need this specific dictionary format for some other use, you could always write .as_dict() methods for your classes.

CodePudding user response:

You can add any indicator you want. I'll demonstrate modifying the dictionary as an indicator by adding the field type to both list:

Applications = []
Applications  = [{"type": "activity", **d} for d in Activities]
Applications  = [{"type": "project", **d} for d in Projects]

Then you can filter based on the type key

>>> print(Applications)
[{'type': 'activity', 
  'status': 'Applied',
  'activity_name': 'Aasd',
  'duration_days': 15,
  'time_commitment': 10},
 {'type': 'project', 
  'application_status': '101',
  'chezuba_project': '4',
  'picture': 'projectimage-04.jpg',
  'duration': 4,
  'time_commitment': 6}]

>>> print([d in Applications if d["type"] == "activity"])
[{'type': "activity', 
  'status': 'Applied',
  'activity_name': 'Aasd',
  'duration_days': 15,
  'time_commitment': 10},
]
  •  Tags:  
  • Related