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

3

I have a string that looks something like this:

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格式)。


2
连尝试都没有吗? - trincot
我们需要知道字典应该长什么样子。 - timgeb
1
@timgeb 我在帖子中添加了格式。 - crypticgamer
什么是“entry”?为什么键有时是“type”,有时是“name”在名称之前? - timgeb
我编辑了格式以更新值。应该只有两个键'type'和'status'。 - crypticgamer
4个回答

2
假设您想要一个列表:
设置:
>>> 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'}]

0
在你的代码中,你正在使用一组字典,这不是最佳选择,这里我正在使用一个字典列表。
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'}]

0
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'}]

如果名称包含字符串“pass”,但实际状态为失败,该怎么办? - Hoxha Alban

0

将文本输入定义为一个多行字符串text,您可以将其内容读入所需的字典结构中,如下所示:

# from collections import defaultdict
from pprint import pprint as pp

text = """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 text.split("\n"):
    type, status = line.split()[0:2]
    d.append({"type": type, "status": status})

pp(d)

这将输出:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接