将多行“表格”字符串转换为字典

2024-09-26 22:11:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串,看起来像这样:

name1                            pass  blue  n/a
name-6t56-yt6                    fail  red   n/a
name-45                          pass  blue  n/a
name-6t567-yt6                   fail  red   n/a

我希望从前两列中提取数据,并以以下方式将其理想地存储在字典中:

[{'type': 'name1', 'status': 'pass'}, {'type': 'name-6t56-yt6', 'status': 'fail'}, {'type': 'name-45', 'status': 'pass'}, {'type': 'name-6t567-yt6', 'status': 'fail'}]

有什么办法吗

请注意,这是一个多行字符串(utf-8格式)


Tags: 数据字符串name字典typestatus方式blue
3条回答

在您的代码中,您使用的是一组字典,这不是最好的主意,这里我使用的是一组字典

s = """name1                            pass  blue  n/a
name-6t56-yt6                    fail  red   n/a
name-45                          pass  blue  n/a
name-6t567-yt6                   fail  red   n/a"""

d = []
for line in s.split('\n'):
    type, status = line.split()[0:2]
    d.append({'type': type, 'status': status})

d的内容:

[{'type': 'name1', 'status': 'pass'},
 {'type': 'name-6t56-yt6', 'status': 'fail'},
 {'type': 'name-45', 'status': 'pass'},
 {'type': 'name-6t567-yt6', 'status': 'fail'}]
from pprint import pprint

with open('file.txt') as f:
    data = f.readlines()

result = []
for line in data:
    result.append({
        'type': line[0:line.index(' ')],
        'status': 'pass' if 'pass' in line else 'fail'
    })

pprint(result)
# [{'status': 'pass', 'type': 'name1'},
#  {'status': 'fail', 'type': 'name-6t56-yt6'},
#  {'status': 'pass', 'type': 'name-45'},
#  {'status': 'fail', 'type': 'name-6t567-yt6'}]

假设您想要一个列表

设置:

>>> s = '''name1                            pass  blue  n/a
... name-6t56-yt6                    fail  red   n/a
... name-45                          pass  blue  n/a
... name-6t567-yt6                   fail  red   n/a'''

构造结果:

>>> [dict(zip(('type', 'status'), line.split(maxsplit=2)[:2])) for line in s.splitlines()]
[{'type': 'name1', 'status': 'pass'}, {'type': 'name-6t56-yt6', 'status': 'fail'}, {'type': 'name-45', 'status': 'pass'}, {'type': 'name-6t567-yt6', 'status': 'fail'}]

相关问题 更多 >

    热门问题