变换|字典中的分隔值

时间:2015-12-13 16:09:55

标签: python dictionary

我需要将下面报告的数据字符串转换为带有时间戳(第一个数字元素)作为键的字典。我怎么能这样做?

element=20151201091000|22844.4|22786.2|22801.6|22839.7|1091
     element=20151201091500|22839.6|22798.3|22837.9|22801.7|477
         element=20151201092000|22800.4|22770.3|22799.1|22772.7|420

2 个答案:

答案 0 :(得分:2)

如果没有正则表达式,您可以轻松完成此任务:

s = """element=20151201091000|22844.4|22786.2|22801.6|22839.7|1091
element=20151201091500|22839.6|22798.3|22837.9|22801.7|477
element=20151201092000|22800.4|22770.3|22799.1|22772.7|420"""



def pairs(s):
    for line in s.splitlines():
        spl = line.split("=")[1].split("|")
        yield spl[0], spl[1:]

print(dict(pairs(s)))

或者使用python3你可以解压缩:

def pairs(s):
    for line in s.splitlines():
        k,*vals = line.split("=")[1].split("|")
        yield k, vals


print(dict(pairs(s)))

两者都会给你:

{'20151201091000': ['22844.4', '22786.2', '22801.6', '22839.7', '1091'], '20151201091500': ['22839.6', '22798.3', '22837.9', '22801.7', '477'], '20151201092000': ['22800.4', '22770.3', '22799.1', '22772.7', '420']}

如果你想演员:

def pairs(s):
    for line in s.splitlines():
        k,*vals = map(float, line.split("=")[1].split("|"))
        yield k, vals


print(dict(pairs(s)))

输出:

{20151201091000.0: [22844.4, 22786.2, 22801.6, 22839.7, 1091.0], 20151201092000.0: [22800.4, 22770.3, 22799.1, 22772.7, 420.0], 20151201091500.0: [22839.6, 22798.3, 22837.9, 22801.7, 477.0]}

答案 1 :(得分:0)

lines成为您的字符串,即

>>> print(lines)
element=20151201091000|22844.4|22786.2|22801.6|22839.7|1091
     element=20151201091500|22839.6|22798.3|22837.9|22801.7|477
         element=20151201092000|22800.4|22770.3|22799.1|22772.7|420

现在我们可以使用re和字典理解来构建您想要的字典,其中我假设密钥应该是int以及float s的值列表。我也假设第一个'|'之前的整数每行中的字符是您想要的键。

>>> import re
>>> {int(re.search('^.*?(\d+)|', s).group(1)) : map(float, s.split('|')[1:]) for s in lines.split('\n')}
{20151201091000: [22844.4, 22786.2, 22801.6, 22839.7, 1091.0], 20151201092000: [22800.4, 22770.3, 22799.1, 22772.7, 420.0], 20151201091500: [22839.6, 22798.3, 22837.9, 22801.7, 477.0]}