如何使用Python迭代字典列表并按公共键值分组以适配API消费格式
如何用Python按Team和Coach分组球员数据,避免重复信息
Hey there! 作为Python新手,处理这类分组问题确实容易摸不着头脑,我来帮你搞定这个需求。咱们的目标很明确:把同一个团队+教练组合下的球员归到一起,不再重复显示团队和教练信息对吧?
核心思路
我们可以用一个字典作为临时的分组容器,把(team, coach)这个元组作为唯一键(因为元组可哈希,能精准区分不同的团队教练组合),这样相同组合的球员就会被自动归到同一组里。最后再把这个字典转换成你需要的结构化列表就行。
完整代码实现
# 你的输入数据 players_data = [ {"id": "3", "name": "John", "team": "corinthians", "coach": "Chris"}, {"id": "2", "name": "Ben", "team": "palmeiras", "coach": "Aron"}, {"id": "6", "name": "Frank", "team": "palmeiras", "coach": "Aron"}, {"id": "7", "name": "Evan", "team": "corinthians", "coach": "Chris"}, {"id": "1", "name": "Micheal", "team": "palmeiras", "coach": "Aron"}, {"id": "10", "name": "Zack", "team": "santos", "coach": "David"} ] # 初始化一个空字典用来分组 grouped_teams = {} # 遍历每一条球员数据 for player in players_data: # 用(team, coach)作为唯一标识键 group_key = (player["team"], player["coach"]) # 如果这个组合还没被创建,先初始化分组结构 if group_key not in grouped_teams: grouped_teams[group_key] = { "team": player["team"], "coach": player["coach"], "players": [] } # 把当前球员的id和name添加到对应分组的players列表中 grouped_teams[group_key]["players"].append({ "id": player["id"], "name": player["name"] }) # 把字典的值转换成最终需要的列表格式 final_result = list(grouped_teams.values()) # 打印看看结果(用json格式化输出更清晰) import json print(json.dumps(final_result, indent=2))
代码解释
- 分组键的选择:用
(team, coach)元组作为键,能保证每个团队+教练的组合都是唯一的,不会出现混淆。 - 初始化分组:当第一次遇到某个团队+教练组合时,我们创建一个包含
team、coach和空players列表的条目。 - 添加球员:后续遇到同组合的球员,直接把他们的
id和name追加到对应的players列表里。 - 转换格式:最后把字典的所有值提取出来转成列表,就是你想要的结构化数据啦。
进阶简化(Python 3.10+)
如果你用的是较新的Python版本,还可以用collections.defaultdict来简化初始化步骤,代码会更简洁:
from collections import defaultdict players_data = [ # 你的输入数据同上 ] grouped_teams = defaultdict(lambda: {"team": "", "coach": "", "players": []}) for player in players_data: group_key = (player["team"], player["coach"]) # 第一次遇到该组合时,设置team和coach if not grouped_teams[group_key]["team"]: grouped_teams[group_key]["team"] = player["team"] grouped_teams[group_key]["coach"] = player["coach"] grouped_teams[group_key]["players"].append({"id": player["id"], "name": player["name"]}) final_result = list(grouped_teams.values())
运行以上代码,就能得到你期望的输出格式啦!
内容的提问来源于stack exchange,提问作者david okorie
相关产品推荐
相关产品推荐

