gpt4 book ai didi

python - 在 Python 中处理字符串中的每一行并将其附加到字典

转载 作者:行者123 更新时间:2023-11-28 22:20:44 24 4
gpt4 key购买 nike

我正在处理输入字符串 text 以获得所需的输出

当前代码:

def process():
content = {}

text = """[hsdgsaj]{\"id\": \"1\", \"@hello\": 12345}
[dkfld]{\"id\": \"2\", \"@hello\": 123456}
[dfgjl]{\"id\": \"3\", \"@hello\": 1234567}
[fd]{\"id\": \"4\", \"@hello\": 12345678}"""
contents = list()
char = '\n'
for index in range(len(text)):
if char in text[index]:
contents.append(text[:index])
# print contents
for line in contents:
line = re.sub(r'.*{', '{', line)
line = line.replace('@hello', 'hello')
# print line

contents = line

print contents

return contents

我想按照以下步骤做:

  1. text 中的每一行在换行符上用 \n 分隔。
  2. 去掉每一行的开头部分(即方括号 [...] 内的部分)
  3. @hello替换为hello
  4. 将最终字符串传递给字典 contents

当前输出:

['{"id": "1", "hello": 12345}\n{"id": "2", "hello": 123456}\n{"id": "3", "hello": 1234567}']

预期输出:

{"id": "1", "hello": 12345}
{"id": "2", "hello": 123456}
{"id": "3", "hello": 1234567}
{"id": "4", "hello": 12345678}

有人可以帮我解决这个问题吗?

最佳答案

对于每一行,你想要:

  1. 删除前导方括号及其内容:使用正则表达式
  2. 评估字典:使用 ast.literal_eval 因为它们是有效的 python 字典(json.loads 也有效)

在一行中,使用列表理解生成字典列表,如下所示:

import ast,re

text = """[hsdgsaj]{\"id\": \"1\", \"@hello\": 12345}
[dkfld]{\"id\": \"2\", \"@hello\": 123456}
[dfgjl]{\"id\": \"3\", \"@hello\": 1234567}
[fd]{\"id\": \"4\", \"@hello\": 12345678}"""

result = [ast.literal_eval(re.sub('^\[.*?\]',"",x)) for x in text.splitlines()]

print(result)

结果:

[{'id': '1', '@hello': 12345}, {'id': '2', '@hello': 123456}, 
{'id': '3', '@hello': 1234567}, {'id': '4', '@hello': 12345678}]

将拆分文本作为行进行迭代,删除前导括号并求值。

编辑:现在我意识到我忘记了删除键中的“@”字符。让我们迭代解析后的字典,这样更清晰:

result = [{k.lstrip("@"):v for k,v in ast.literal_eval(re.sub('^\[.*?\]',"",x)).items()} for x in text.splitlines()]

这会产生:

[{'id': '1', 'hello': 12345}, {'id': '2', 'hello': 123456}, 
{'id': '3', 'hello': 1234567}, {'id': '4', 'hello': 12345678}]

此技术简单且安全,因为它能够解析包含方括号或大括号的键/值。完整的正则表达式方法不能保证这一点。

关于python - 在 Python 中处理字符串中的每一行并将其附加到字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48735657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com