【问题标题】:Constructing JSON Array构造 JSON 数组
【发布时间】:2018-12-03 01:08:32
【问题描述】:

我想要这样的东西:

[
    ('Urbandale paid the Regional Municipality of Ottawa-Carleton "redevelopment" charges',
     {'entities': [(0, 9, 'PLTF')]}),
    ('Urbandale carries on business as a land developer.',
     {'entities': [(0, 9, 'PLTF')]})
    ]

我可以将它设置为变量并让它工作,但现在我尝试自动构建 JSON 数组。这似乎是一种非常规的格式?即为什么句子后面有逗号而不是:

无论如何它是 spacy 所需的格式。 我尝试创建一个字典,然后将 json.dumps 放入一个 json 对象中,这要容易得多,但需要的是一个数组。

我看过这篇文章:Python - Create array of json objects from for loops 并尝试建设性地进行迭代,但我只是得到一个无效的语法错误

spans = []
for mention in mentions:
    mention = str(mention)
    for f in re.finditer(subj, mention): 
        spans.append(f.span())
train_data = [{mention, "entities": (f.span()[0], f.span()[1], 'PLTF')} for mention, span in zip(mentions, spans)]

编辑:使用 json.load(),TEST_DATA[0][1](我想要的结构)产生与 TRAIN_DATA[0][1] 几乎相同的结果,除了在内部的附加 ()字典。我很确定这是我收到此错误的罪魁祸首:TypeError: 'int' object is not iterable。那么我将如何插入呢?如果我只是在它周围加上一个额外的 (),python 会解析它并将其删除。

已解决:只需添加一个额外的 []

谢谢

【问题讨论】:

  • 错误是什么?
  • 语法错误点在 : "entities" 之后

标签: python arrays json iteration


【解决方案1】:

你想要的实际上是将 str 作为第一个元素,将 dict 作为第二个元素的元组列表。只需添加更多括号并移动您的咖喱括号。

train_data = [(mention, {"entities": (f.span()[0], f.span()[1], 'PLTF')}) for mention, span in zip(mentions, spans)]

【讨论】:

  • 好的,我停止收到语法错误,但我仍然收到此错误'str' object does not support item assignment。我认为主要问题是数组或至少其中一部分被读取为字符串。这部分 (f.span()[0], f.span()[1], 'PLTF')??我只得到 [0, 9, "PLTF"] 而不是里面有括号。还有一堆应该有()的地方有一个[]。我不确定是否可以简单地替换那些而不破坏编码
  • 编辑:使用 json.load(), TEST_DATA[0][1] (我想要的结构)产生与 TRAIN_DATA[0][1] 几乎相同的结果,除了额外的 ()在字典的内部。我很确定这是我收到此错误的罪魁祸首:TypeError: 'int' object is not iterable。那么我将如何插入呢?如果我只是在它周围加上一个额外的 (),python 会解析它并删除它
猜你喜欢
  • 2018-10-02
  • 2015-11-25
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多