从字符串中提取字典

2024-01-15

我正在调用一个返回包含字典的字符串的函数。我怎样才能提取这个字典,记住第一行和最后一行可能包含“{”和“}”。

This is a {testing string} example
This {is} a testing {string} example
{"website": "stackoverflow",
"type": "question",
"date": "10-09-2020"
}
This is a {testing string} example
This {is} a testing {string} example

我需要将此值提取为字典变量。

{"website": "stackoverflow",
"type": "question",
"date": "10-09-2020"
}

更新答案


考虑到 @martineau 和 @ekhumoro 的评论,以下编辑后的代码包含一个函数,该函数搜索字符串并提取有效的所有内容dicts。这是对我之前的答案更稳健的方法,因为现实世界的内容dict可能会有所不同,并且这个逻辑(希望)能够解释这一点。

示例代码:

import json
import re

def extract_dict(s) -> list:
    """Extract all valid dicts from a string.
    
    Args:
        s (str): A string possibly containing dicts.
    
    Returns:
        A list containing all valid dicts.
    
    """
    results = []
    s_ = ' '.join(s.split('\n')).strip()
    exp = re.compile(r'(\{.*?\})')
    for i in exp.findall(s_):
        try:
            results.append(json.loads(i))        
        except json.JSONDecodeError:
            pass    
    return results

测试字符串:

OP 的原始字符串已更新以添加多个dicts,作为最后一个字段的数值,以及list value.

s = """
This is a {testing string} example
This {is} a testing {string} example
{"website": "stackoverflow",
"type": "question",
"date": 5
}
{"website": "stackoverflow",
"type": "question",
"date": "2020-09-11"
}
{"website": "stackoverflow",
"type": "question",
"dates": ["2020-09-11", "2020-09-12"]
}
This is a {testing string} example
This {is} a testing {string} example
"""

Output:

正如OP所述,通常只有一个dict在字符串中,因此(显然)可以使用results[0].

>>> results = extract_dict(s)

[{'website': 'stackoverflow', 'type': 'question', 'date': 5},
 {'website': 'stackoverflow', 'type': 'question', 'date': '2020-09-11'},
 {'website': 'stackoverflow', 'type': 'question', 'dates': ['2020-09-11', '2020-09-12']}]

原答案:


忽略此部分。尽管该代码可以工作,但它特别适合OP的要求,并且对于其他用途来说并不健壮。

此示例使用正则表达式来识别字典开头{"和字典结束"}并提取中间部分,然后将字符串转换为正确的字符串dict。随着新行的出现并使正则表达式变得复杂,我只是将字符串展平以开始。

根据 @jizhihaoSAMA 的评论,我已更新为使用json.loads将字符串转换为dict,因为它更干净。如果您不想额外导入,eval也可以,但不推荐。

示例代码:

import json
import re

s = """
This is a {testing string} example
This {is} a testing {string} example
{"website": "stackoverflow",
"type": "question",
"date": "10-09-2020"
}
This is a {testing string} example
This {is} a testing {string} example
"""

s_ = ' '.join(s.split('\n')).strip()
d = json.loads(re.findall(r'(\{\".*\"\s?\})', s_)[0])

>>> d
>>> d['website']

Outputs:

{"website": "stackoverflow", "type": "question", "date": "10-09-2020"}

'stackoverflow'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从字符串中提取字典 的相关文章

  • 使用 pyppeteer 与 asyncio 关联来抓取内容

    我用 python 结合编写了一个脚本pyppeteer随着asyncio从其登陆页面抓取不同帖子的链接 并最终通过跟踪通向其内页的 url 来获取每个帖子的标题 我这里解析的内容不是动态的 但是 我利用了pyppeteer and asy
  • 使用 keras 澄清 Yolo v3 模型输出

    我将 yolo v3 模型与 keras 一起使用 该网络为我提供了形状如下的输出容器 1 13 13 255 1 26 26 255 1 52 52 255 所以我找到了这个link https www cyberailab com ho
  • 在android中点击地图获取坐标

    我正在尝试做这样的事情 我有一个地图活动 当用户点击地图时 它会显示该位置的坐标 我已经重写了 onclick 方法 但它甚至没有被调用 任何想法 public class MapPoint extends MapActivity impl
  • TemplateSyntaxError:“settings_tags”不是有效的标签库

    当我尝试运行此测试用例时 出现此错误 这是在我的 django 应用程序的tests py 中编写的 def test accounts register self self url http royalflag com pk accoun
  • 使用 Poetry 创建的 Python 项目:如何在 Visual Studio Code 中调试它?

    我有一个根据基本 Poetry 创建的 Python 项目指示 https python poetry org docs basic usage 项目文件夹是这样的 my project my project my project py F
  • 如何检查给定的数字是否是2的幂?

    下面的代码不适用于某些输入 a i set 1 while i lt 10000 a add i i lt lt 1 N int input if N in a print True else print False 我最初的想法是检查每个
  • 属性文件中的字符串主机名:Java

    这听起来可能是一个非常简单的问题 但我无法找到解决方法 我有一个 config properties 文件 其中包含两个键值 IP 地址和端口号 我读取此配置文件以提取字符串格式的键值 但是 当我尝试使用这些值时 我无法连接到从配置文件中检
  • Python SQLite3 SQL注入漏洞代码

    我知道下面的代码片段由于 format 的原因很容易受到 SQL 注入的攻击 但我不知道为什么 有谁明白为什么这段代码容易受到攻击以及我从哪里开始修复它 我知道这些代码片段使输入字段保持打开状态 以便通过 SQL 注入执行其他恶意命令 但不
  • pandas DataFrame 中行的高效成对比较

    我目前正在处理一个较小的数据集 大约 900 万行 不幸的是 大多数条目都是字符串 即使强制类别 框架在内存中也只有几 GB 我想做的是将每一行与其他行进行比较 并对内容进行直接比较 例如 给定 A B C D 0 cat blue old
  • 按升序对数字字符串列表进行排序

    我创建了一个SQLite https en wikipedia org wiki SQLite数据库有一个存储温度值的表 第一次将温度值按升序写入数据库 然后 我将数据库中的温度值读入列表中 然后将该列表添加到组合框中以选择温度 效果很好
  • 如何使用 Python 在表单中选择选项?

    我想知道如何以格式如下的形式选择选项 td align left td
  • python os.fork 使用相同的 python 解释器吗?

    据我所知 Python 中的线程使用相同的 Python 解释器实例 我的问题是与创建的流程相同os fork 或者每个进程创建的os fork有自己的翻译吗 每当你 fork 时 整个 Python 进程都会在内存中复制 包括Python
  • 使用最新值进行采样

    考虑以下系列 created at 2014 01 27 21 50 05 040961 80000 00 2014 03 12 18 46 45 517968 79900 00 2014 09 05 20 54 17 991260 636
  • 如何判断一个字符串是否包含特定子串

    给定一个字符串A 如何确定该字符串是否包含子字符串 video x flv A indexOf video x flv gt 0
  • 我应该在哪里对对象和字段进行 django 验证?

    我正在创建一个 Django 应用程序 它使用 Django Rest Framework 和普通的 django views 作为用户的入口点 我想对模型的独立字段以及整个对象进行验证 例如 字段 根据正则表达式函数输入的车牌是否正确 与
  • 从 SUDS 中的 SOAP 响应中提取 Cookie

    我必须使用具有多种服务的 API 所有这些都需要来自下面的身份验证的 JSESSION cookie 然而 当我调用下一个服务时 它不会保留 cookie 因此会拒绝它们 from suds client import Client url
  • 如何通过 API Gateway 使用事件调用类型调用 Lambda 函数?

    文件说 默认情况下 Invoke API 采用 RequestResponse 调用类型 您可以选择通过将 Event 指定为 InitationType 来请求异步执行 因此 我可以发送到我的函数 python 的就是到处都是 Inspi
  • 混合语言源目录布局

    我们正在运行一个使用多种不同语言的大型项目 Java Python PHP SQL 和 Perl 到目前为止 人们一直在自己的私有存储库中工作 但现在我们希望将整个项目合并到一个存储库中 现在的问题是 目录结构应该是什么样的 我们应该为每种
  • 基于 Web 请求在 Airflow 上运行作业

    我想知道是否可以在通过 HTTP 收到请求时执行气流任务 我对 Airflow 的调度部分不感兴趣 我只是想用它来代替芹菜 因此 示例操作如下所示 用户提交一份表格 请求某些报告 后端接收请求并向用户发送请求已收到的通知 然后后端使用 Ai
  • Python 中的可逆 STFT 和 ISTFT

    有没有通用的形式短时傅立叶变换 https en wikipedia org wiki Short time Fourier transform与内置于 SciPy 或 NumPy 或其他什么中的相应逆变换 这是pyplotspecgram

随机推荐

  • 在 iOS 7 上纵向裁剪图像会导致方向错误

    我有以下功能 在 iOS 7 和 XCode 5 之前它按预期工作 该函数采用图像和cropSize 该图像是要裁剪为指定尺寸的图像 该尺寸由 CGSizecropSize 定义 该函数的目的是将图像裁剪到一定大小 然后返回裁剪后的图像 U
  • 纯SwiftUI登录、注册、注册流程,可以吗?

    我是 ios 开发新手 直接接触了 SwiftUI 和 Xcode 12 我试图了解从登录屏幕登录的流程 在输入凭据后 您将看到一个选项卡视图屏幕 当应用程序首次加载时 会显示登录信息 登录成功后 将返回并保存来自服务器的令牌 并进一步启动
  • 如何在 C 中找到可用的端口?

    操作系统是Linux 我有一个可以实时更改其端口的服务器进程 但是我想在绑定之前提前知道端口是否空闲 场景 服务器绑定 localhost 5000 并收到绑定 localhost 6000 的请求 服务器必须检查端口是否空闲 此问题寻求提
  • 如何更改 rmarkdown 单元格中的 css 和闪亮?

    我相对较新r并创造传单情节为此我需要一个白色背景代替grey 我遇到了这个SO发布相同内容 传单地图的空白 白色背景 https stackoverflow com questions 45989920 blank white backgr
  • jquery:在特定部分输入Tab触发器

    我目前在 也许 简单的编程中遇到问题 我是 jquery 的新手 这些是我的代码 text keyup function e if e keyCode 13 alert Enter key was pressed this trigger
  • 处理 WorkManager 对网络连接失败的响应

    我正在使用 WorkManager 将数据从本地 Room 数据库同步到服务器 问题是 Room 在 Loop MainLooper 中构建数据库时出错 当我按照以下方式使用它时 它工作正常 但我无法根据任务完成情况在成功或重试时返回 Wo
  • 如何通过.bat文件运行Java应用程序[重复]

    这个问题在这里已经有答案了 我需要通过 bat 文件运行我的 Java 应用程序 只需创建一个包含以下行的 bat 文件 ECHO OFF set CLASSPATH set CLASSPATH CLASSPATH path to need
  • 在 python 脚本中加载环境模块

    有没有办法让Python脚本加载和使用环境模块 http modules sourceforge net os system module load xxx 不起作用 因为它在子 shell 中执行它们 至少 我认为这就是发生的情况 我知道
  • htmlspecialchars() 期望参数 1 为字符串,对象在 COdeIgniter 中给出错误

    将类型转换数组分配给 codeigniter 会话时 出现此错误 A PHP Error was encountered Severity Warning Message htmlspecialchars expects parameter
  • 响应式网站适用于桌面设备,但不适用于移动设备

    我正在开发这个响应式 WordPress 网站 http www allisoncassels com Test http www allisoncassels com Test 我的媒体查询有问题 我为以下断点编写了 CSS 代码 Por
  • 使用带有多个分隔符的 String.split()

    我需要根据分隔符分割字符串 and 以下是我想要的输出 AA BB CC DD zip gt AA BB CC DD zip 但我的以下代码不起作用 private void getId String pdfName String toke
  • 头文件的包含是如何发生的?

    我有一个纯 C 代码 工作区中有 c 和 h 文件 我有一个头文件 1 h 声明一些结构为 struct my1 int a my t 但是当我尝试在另一个头文件 2 h 中声明类型为 struct my1 的变量时 如下所示 struct
  • 使视图变暗,就像禁用一样

    如何使视图变暗 就好像它被禁用 突出显示一样 最好不使用任何其他视图 我所说的视图是指UIView 及其所有孩子 我想达到禁用 突出显示相同的效果UIButton 不要假设视图是完全不透明的 我目前正在玩的 创建一个不透明的黑色图层 hig
  • 在 bootstrap-vue modal (b-modal) int 测试中找不到按钮

    我想在我的测试用例中测试模态行为 通过页面上的按钮打开模式 isVisible false gt true 通过模态上的按钮关闭模态 可见 true gt false 第一步是可以的 但是第二步就失败了 我可以通过ref找到模态 但我找不到
  • 我可以强制 svcutil.exe 为 WCF 服务生成数据协定吗?

    我愿意强行svcutil生成 WCF 使用的程序集中的所有数据协定 无论给定操作协定是否引用类型 DataContract public class Foo DataContract public class Bar Foo Service
  • java 集合排序的绑定不匹配

    您好 需要有关 java 集合排序的帮助 它给了我这个错误 Bound mismatch The generic method sort List
  • 如何从丢失的树和悬挂的斑点中恢复文件?

    After git add I ran git rm r f 并且我的所有本地文件都被意外删除 恢复它们后git fsck lost found I have this http paste ubuntu com 26162239 in l
  • 如何将 0000-00-00 00:00:00 值的日期时间设置为 NULL?

    我需要更改数据库上的一些值 我忘记为表设置可为空 默认设置为 0000 00 00 00 00 00 现在我需要将该值转换为NULL 字段类型为日期时间 我该怎么做 我尝试使用典型的Update table set field NULL W
  • Python:使用“lxml.html”将 HTML 内容注入到标签中

    我正在使用lxml html解析 HTML 文档的库 我找到了一个特定的标签 我称之为content tag 并且我想更改其内容 即之间的文本 div and div 新内容是一个字符串 其中包含一些 html 比如说 Hello b wo
  • 从字符串中提取字典

    我正在调用一个返回包含字典的字符串的函数 我怎样才能提取这个字典 记住第一行和最后一行可能包含 和 This is a testing string example This is a testing string example webs