Учитывая два списка диктовок, как их можно объединить на основе значения определенного c ключа id
?
#List of dicts1
players = [ {'age': '19 years 275 days',
'birth': '24 July 2000',
'birth_exact': 964396800000.0,
'country': 'Ecuador',
'first': 'Leonardo',
'id': 74562.0,
'isoCode': 'EC',
'last': 'Campana',
'loan': False,
'name': 'Leonardo Campana',
'nationalTeam': 'Ecuador',
'playerId': 179304.0,
'position': 'F',
'positionInfo': 'Centre Striker',
'season': 2019,
'shirtNum': None},
{'age': '24 years 186 days',
'birth': '21 October 1995',
'birth_exact': 814233600000.0,
'country': 'Portugal',
'first': 'Daniel',
'id': 11362.0,
'isoCode': 'PT',
'last': 'Castelo Podence',
'loan': False,
'name': 'Daniel Podence',
'nationalTeam': 'Portugal',
'playerId': 180050.0,
'position': 'M',
'positionInfo': 'Left/Right Winger',
'season': 2019,
'shirtNum': 10.0}]
#List of dicts2
squad = [ {'id': 11362.0,
'team': 'Arsenal',
'team_id':1,
'team_shortName': 'Arsenal'},
{'id': 74562.0,
'team': 'Wolverhampton Wanderers',
'team_id': 38,
'team_shortName': 'Wolves'}]
Я хочу объединить информацию в squad
в players
.
Я пробовал следующее:
p_sort = sorted(players, key=lambda k: k['id'])
s_sort = sorted(squad, key=lambda k: k['id'])
l3 = [{**u, **v} for u, v in zip_longest(p_sort, s_sort, fillvalue={})]
return l3
Но небольшая проблема состоит в том, что два списка диктов имеют разную длину, поэтому это решение не работает, как предполагалось. Как это можно решить?
Ожидаемый результат:
l3 = [ {'age': '19 years 275 days',
'birth': '24 July 2000',
'birth_exact': 964396800000.0,
'country': 'Ecuador',
'first': 'Leonardo',
'id': 74562.0,
'isoCode': 'EC',
'last': 'Campana',
'loan': False,
'name': 'Leonardo Campana',
'nationalTeam': 'Ecuador',
'playerId': 179304.0,
'position': 'F',
'positionInfo': 'Centre Striker',
'season': 2019,
'shirtNum': None,
'team': 'Wolverhampton Wanderers',
'team_id': 38,
'team_shortName': 'Wolves'}},
{'age': '24 years 186 days',
'birth': '21 October 1995',
'birth_exact': 814233600000.0,
'country': 'Portugal',
'first': 'Daniel',
'id': 11362.0,
'isoCode': 'PT',
'last': 'Castelo Podence',
'loan': False,
'name': 'Daniel Podence',
'nationalTeam': 'Portugal',
'playerId': 180050.0,
'position': 'M',
'positionInfo': 'Left/Right Winger',
'season': 2019,
'shirtNum': 10.0},
'team': 'Arsenal',
'team_id': 1,
'team_shortName': 'Arsenal'}]