如何从含多词球队名的文件生成球队-年份列表字典?
解决带空格球队名的字符串转字典问题
这个问题确实挺常见的——因为球队名可能包含空格,直接按空格拆分肯定会把队名拆得七零八落。我推荐用正则表达式来处理,它能精准识别球队名(字母+空格组合)和对应的年份组(数字+逗号组合),完美解决拆分难题。
实现思路
核心逻辑是利用正则的匹配规则:
- 球队名由字母和空格组成,且后面必然跟着年份(数字开头)
- 年份组是数字和逗号的组合,且下一个球队名必然以大写字母开头(或到字符串结尾)
用正则的非贪婪匹配和正向预查来精准捕获每一组「球队名-年份」对,再把年份转成整数列表存入字典。
代码示例
import re # 你的原始输入字符串 input_str = "Barcelona 2015,2016,2017 Real Madrid 2010 Napoli 2007,2009 Bayern Munich 2008,2009,2010,2011,2012,2013" # 正则匹配模式:捕获球队名和对应的年份字符串 # 解释: # ([A-Za-z\s]+?):非贪婪匹配字母+空格,避免把后续球队名包含进来 # \s:匹配队名和年份之间的空格 # ([\d,]+):匹配年份部分(数字+逗号) # (?=\s[A-Z]|$):正向预查,确保后面是「空格+大写字母」(下一个球队)或字符串结尾 pattern = r'([A-Za-z\s]+?)\s([\d,]+)(?=\s[A-Z]|$)' matches = re.findall(pattern, input_str) # 构建目标字典 team_year_dict = {} for team, years_str in matches: # 去除队名前后可能的多余空格 clean_team = team.strip() # 拆分年份字符串并转成整数列表 year_list = [int(year) for year in years_str.split(',')] team_year_dict[clean_team] = year_list # 输出结果 print(team_year_dict)
运行结果
执行后会得到你想要的字典:
{ 'Barcelona': [2015, 2016, 2017], 'Real Madrid': [2010], 'Napoli': [2007, 2009], 'Bayern Munich': [2008, 2009, 2010, 2011, 2012, 2013] }
补充说明
如果你的输入字符串有其他特殊情况(比如球队名带小写开头?不过通常队名首字母大写),可以微调正则模式,但这个方案已经覆盖了大部分常见场景。
内容的提问来源于stack exchange,提问作者Lee Yaan
相关产品推荐
相关产品推荐

