我需要将下面报告的数据字符串转换为带有时间戳(第一个数字元素)作为键的字典。我怎么能这样做?
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
答案 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]}