首页 > 解决方案 > 通过最外面的大括号将字符串拆分为列表

问题描述

我有字符串

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

解决方案


由于您的输入是一个有效的 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"}}']

推荐阅读