I have a list of dicts, where each dict refers to a team and its assets.
e.g.
list_of_dicts = [
{
"team": "X",
"description": "A description of X",
"types": [
{
"type": "TYPEA",
"assets": {
"high_value": [
{"id": "asset_1_id", "name": "asset_1_name"},
{"id": "asset_2_id", "name": "asset_2_name"},
],
"low_value": [
{"id": "asset_3_id", "name": "asset_3_name"},
{"id": "asset_4_id", "name": "asset_4_name"},
],
},
},
{
"type": "TYPEB",
"assets": {
"high_value": [
{"id": "asset_1_id", "name": "asset_1_name"},
{"id": "asset_2_id", "name": "asset_2_name"},
],
"low_value": [
{"id": "asset_3_id", "name": "asset_3_name"},
{"id": "asset_4_id", "name": "asset_4_name"},
],
},
},
],
},
{
"team": "X",
"description": "A description of X",
"types": [
{
"type": "TYPEC",
"assets": {
"high_value": [
{"id": "asset_1_id", "name": "asset_1_name"},
{"id": "asset_2_id", "name": "asset_2_name"},
],
"low_value": [
{"id": "asset_3_id", "name": "asset_3_name"},
{"id": "asset_4_id", "name": "asset_4_name"},
],
},
}
],
},
]
Where here, there are 2 dicts for team X, with different Types (TYPEA
and TYPEB
, then another with TYPEC
), there will also be 2 dicts for Team Y, maybe 3 for team Z etc.
My desired outcome, is to have a list of dicts, where there is only 1 dict for Team X, that has Type A, B and C together.
*Have not listed desired outcome as makes for very long example. Happy to add.
Would look something like:
list_of_dicts = [
{
"team": "X",
"description": "A description of X",
"types": [
{
"type": "TYPEA",
"assets": {...},
{,
{
"type": "TYPEB",
"assets": {...},
{,
{
"type": "TYPEC",
"assets": {...},
{,
],
},
]
Create a dictionary whose keys are the team names. Then loop through your list of dictionaries, using this to merge the types
lists for the same team.
result_dict = {}
for d in list_of_dicts:
if d['team'] in result_dict:
result_dict[d['team']]['types'].extend(d['types'])
else:
result_dict[d['team']] = d
list_of_dicts = list(result_dict.values())