我有一个关于拆分列表中的字符串并将其添加到字典中的问题。所以我的列表中有一个这样的字符串:
'02-Jan-17 Penn State 49 Southern Cal 52 Pasadena CA'
我想要做的是将其插入字典中,但我需要拆分该字符串并将其插入字典中。
{
'Date': '02-Jan-17',
'Visiting Team': 'Penn State',
'Visitor Score': 49,
'Home Team': 'Southern Cal',
'Home Score': 52,
'Location if Neutral': 'Pasadena CA'
}
所以这是一个有点棘手的地方。位置可能是空白的,所以我不确定我是否可以拆分空白区域。我还需要为列表中的每个字符串重复此操作,最好将它们全部放在同一个字典中。我不确定这是否可能。我是Python的新手,所以任何帮助都会非常感激。
答案 0 :(得分:3)
您显示的数据似乎存储在固定宽度字段中。如果所有数据都在类似大小的字段中,则可以使用切片运算符[:]
来解析数据。
这个程序可能会做你想要的:
def parse(s):
return {
'Date': s[0:9],
'Visiting Team': s[9:38].strip(),
'Visitor Score': int(s[38:41]),
'Home Team': s[41:69].strip(),
'Home Score': int(s[69:72]),
'Location if Neutral': s[72:].strip(),
}
line='02-Jan-17 Penn State 49 Southern Cal 52 Pasadena CA'
assert parse(line) == {
'Date': '02-Jan-17',
'Visiting Team': 'Penn State',
'Visitor Score': 49,
'Home Team': 'Southern Cal',
'Home Score': 52,
'Location if Neutral': 'Pasadena CA',
}
另一种可能性是使用正则表达式来解析数据。这是一个例子:
import re
def parse(s):
m = re.match(r'''
(?x)
(?P<Date>\d+-\w+-\d+) \s+
(?P<Visiting_Team>.*?) \s+
(?P<Visitor_Score>\d+) \s+
(?P<Home_Team>.*?) \s+
(?P<Home_Score>\d+) \s+
(?P<Location_if_Neutral>.*)
''',
s)
return m.groupdict() if m else dict()
line='02-Jan-17 Penn State 49 Southern Cal 52 Pasadena CA'
assert parse(line) == {
'Date': '02-Jan-17',
'Visiting_Team': 'Penn State',
'Visitor_Score': '49',
'Home_Team': 'Southern Cal',
'Home_Score': '52',
'Location_if_Neutral': 'Pasadena CA',
}