Python字典对比:找出未出现在直播赛事中的赛前赛事
找出未出现在直播列表中的赛前赛事
你的两种尝试都存在逻辑问题:
- 示例1的列表推导式会针对每个直播赛事生成一个不匹配的赛前赛事列表,最终得到嵌套列表,而非所有未出现在直播中的赛前赛事集合。
- 示例2的嵌套循环只要赛前赛事与某一个直播赛事不匹配就打印,导致符合条件的赛事被重复打印,且原本存在于直播中的赛事也会因为和其他直播赛事不匹配而被错误打印。
高效解法:利用集合快速查找
先提取直播列表中所有赛事的Match Full字段到集合(集合的成员查询效率远高于列表),再遍历赛前列表筛选出不在集合中的赛事:
pre = [{ "Home": "Genoa", "Away": "Inter", "Match Full": "Genoa v Inter", "Start Data": "19 Lug", "Start Time": "21:30" }, { "Home": "Parma", "Away": "Fiorentina", "Match Full": "Parma v Fiorentina", "Start Data": "17 Ago", "Start Time": "18:30" }] live = [{ "Home": "Dagon Star United FC", "Away": "Ispe FC", "Match Full": "Dagon Star United FC v Ispe FC" }, { "Home": "Genoa", "Away": "Inter", "Match Full": "Genoa v Inter" }] # 提取直播赛事的Match Full到集合 live_match_names = {match["Match Full"] for match in live} # 筛选赛前列表中不在直播里的赛事 missing_matches = [match for match in pre if match["Match Full"] not in live_match_names] # 输出结果 for match in missing_matches: print(match["Match Full"])
运行结果:
Parma v Fiorentina
另一种解法:使用all()函数判断
如果不想用集合,可以通过all()函数判断赛前赛事是否与所有直播赛事都不匹配:
for pre_match in pre: # 检查当前赛前赛事是否未出现在任何直播赛事中 if all(pre_match["Match Full"] != live_match["Match Full"] for live_match in live): print(pre_match["Match Full"])
这个方法逻辑更直观,但对于大规模数据,效率不如集合解法。
内容的提问来源于stack exchange,提问作者x__SHARINGAN____x
相关产品推荐
相关产品推荐

