将列表中的字符串拆分为字典

时间:2017-01-04 20:05:31

标签: python string python-3.x dictionary

我有一个关于拆分列表中的字符串并将其添加到字典中的问题。所以我的列表中有一个这样的字符串:

    '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的新手,所以任何帮助都会非常感激。

1 个答案:

答案 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',
}