首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将结构的字符串表示格式化为python字典

将结构的字符串表示格式化为python字典
EN

Stack Overflow用户
提问于 2021-03-19 20:49:54
回答 2查看 92关注 0票数 0

考虑到字符串不是通用格式的,而是来自UDF函数的输出,我需要一些帮助来处理字符串到Dict。

来自PySpark UDF的返回如下所示:

代码语言:javascript
运行
复制
"{list=[{a=1}, {a=2}, {a=3}]}"

我需要将其转换为具有以下结构的python字典:

代码语言:javascript
运行
复制
{
  "list": [
    {"a": 1}
    {"a": 2}
    {"a": 3}
  ]
}

所以我可以访问它的值,就像

代码语言:javascript
运行
复制
dict["list"][1]["a"]

我已经试过用:

  • JSON.loads
  • ast_eval()

有人能帮帮我吗?

作为如何生成未解析字符串的示例:

代码语言:javascript
运行
复制
@udf()
def execute_method():
  return {"list": [{"a":1},{"b":1}{"c":1}]}

df_result = df_source.withColumn("result", execute_method())
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-19 20:59:52

至少您需要用=替换:,用双引号环绕键:

代码语言:javascript
运行
复制
import json
import re

string = "{list=[{a=1}, {a=2}, {a=3}]}"
fixed_string = re.sub(r'(\w+)=', r'"\1":', string)
print(type(fixed_string), fixed_string)
parsed = json.loads(fixed_string)
print(type(parsed), parsed)

输出

代码语言:javascript
运行
复制
<class 'str'> {"list":[{"a":1}, {"a":2}, {"a":3}]}
<class 'dict'> {'list': [{'a': 1}, {'a': 2}, {'a': 3}]}
票数 2
EN

Stack Overflow用户

发布于 2021-03-19 21:32:19

试试这个:

代码语言:javascript
运行
复制
import re
import json  
data="{list=[{a=1}, {a=2}, {a=3}]}"
data=data.replace('=',':')
pattern=[e.group() for e in re.finditer('[a-z]+', data, flags=re.IGNORECASE)]
for e in set(pattern):
    data=data.replace(e,"\""+e+"\"")
print(json.loads(data))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66715415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档