【问题标题】:Extract a key from an object in string format从字符串格式的对象中提取键
【发布时间】:2021-12-21 07:59:38
【问题描述】:

如何从这个字符串"[{'id': 53, 'name': 'Thriller'}, {'id': 18, 'name': 'Drama'}]"中提取name

我尝试过使用这个 re 命令:

re.findall(r"'name': \D{1,}", text)

但它似乎不起作用

我也尝试过使用json.loads(text) 但它给出了错误

JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 3 (char 2)

知道如何解决这个问题吗?

【问题讨论】:

  • 如果您不想使用eval,请将单引号替换为双引号:json.loads(s.replace("'", '"'))
  • 如果您可以控制字符串的生成方式,最好的办法是首先确保它是正确的 JSON。
  • @JohnnyMopp 请注意,如果字符串包含双引号或转义单引号,这将失败。
  • @Amadan 是的,没错。

标签: python json string dictionary data-manipulation


【解决方案1】:

使用ast.literal_eval

import ast

s = "[{'id': 53, 'name': 'Thriller'}, {'id': 18, 'name': 'Drama'}]"

lst = ast.literal_eval(s)
names = [d["name"] for d in lst]
print(names)

输出

['Thriller', 'Drama']

也可以使用第三方模块pyyaml,如下:

import yaml

s = "[{'id': 53, 'name': 'Thriller'}, {'id': 18, 'name': 'Drama'}]"

lst = yaml.load(s, Loader=yaml.Loader)
names = [d["name"] for d in lst]
print(names)

输出

['Thriller', 'Drama']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-17
    • 2020-01-04
    • 1970-01-01
    • 2021-05-22
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多