构造JSON数组

时间:2018-06-24 03:57:13

标签: python arrays json iteration

我想要这样的东西:

[
    ('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'对象不可迭代。那我该怎么插入呢?如果我只是在其周围放一个多余的(),则python会对其进行解析并将其删除。

已解决:只需再输入一个[]

谢谢

1 个答案:

答案 0 :(得分:0)

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

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