python - 通过最外面的大括号将字符串拆分为列表
问题描述
我有字符串
input_str = '{ "key1": 123, "key2": "val" }, { "key3": 345, "key4": {"key5": "val"} }'
我想用最外面的大括号把它分成列表:
input_list = ['{ "key1": 123, "key2": "val" }', { "key3": 345, "key4": {"key5": "val"} }]
我写了这段代码来获取它:
input_str = '{ "key1": 123, "key2": "val" }, { "key3": 345, "key4": {"key5": "val"} }'
input_list = []
counter = 0
current_str = ''
for char in input_str:
if char == '{':
counter += 1
if char == '}':
counter -= 1
if counter == 0:
if current_str:
current_str += char
input_list.append(current_str)
current_str = ''
else:
current_str += char
print(input_list)
有没有更多的pythonic方式来做到这一点?
解决方案
由于您的输入是一个有效的 Python 字典元组,而预期的输出是 JSON 字符串列表,您可以使用它ast.literal_eval
来解析字符串,并将每个生成的子字典映射到json.dumps
:
import ast
import json
print(list(map(json.dumps, literal_eval(input_str))))
这输出:
['{"key1": 123, "key2": "val"}', '{"key3": 345, "key4": {"key5": "val"}}']
推荐阅读
- azure-devops - Azure Dev Ops 内部部署
- sdk - 如果需要国家和邮政编码权限,可以对 Alexa 提出请求吗?
- mapbox - Mapbox决定重叠顺序
- apache-kafka - WSO2 无法从 Kafka 主题接收数据
- ios - iOS - 在边界限制内绘制
- javascript - Daterangepicker 与 callback 和 apply.daterangepicker 的行为不同
- javascript - Material UI AppBar 不使用主题颜色
- xslt - 用子节点值分组并将分组的值相加一次
- javascript - 为什么我得到 Functions are not valid as a React child?
- prolog - 计算序言中的节点