簡體   English   中英

將多行“表格”字符串轉換為字典

[英]Convert multiline “tabular” string to dictionary

我有一個看起來像這樣的字符串:

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

我想從前 2 列中提取數據,理想情況下以下列方式將其存儲在字典中:

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

關於如何解決這個問題的任何想法?

請注意,這是一個多行字符串(格式為 utf-8)。

假設您想要一個列表

設置:

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

在您的代碼中,您使用的是一組字典,這不是最好的主意,這里我使用的是字典列表

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

將文本輸入定義為多行字符串 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)

其中將 output:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM