【问题标题】:Type Error while using for loop in list of dictionaries in Python在 Python 中的字典列表中使用 for 循环时键入错误
【发布时间】:2018-08-13 12:21:39
【问题描述】:

我在 Python 3.6 上使用该结构从 json 文件中解析数据时遇到错误:

for topic in data:
    cqas = [{'context':      paragraph['context'],
            'id':           qa['id'],
            'question':     qa['question'],
            'answer':       qa['answers'][0]['text'],
            'answer_start': qa['answers'][0]['answer_start'],
            'answer_end':   qa['answers'][0]['answer_start'] + \
                            len(qa['answers'][0]['text']) - 1,
            'topic':        topic['title'] }
            for paragraph in topic['paragraphs']
            for qa in paragraph['qas']]

如上所述,我找不到有关在字典列表中使用 for 循环的文档。我想学习它,因为我在使用该结构时也会收到一条错误消息:

数据集:https://raw.githubusercontent.com/YerevaNN/R-NET-in-Keras/master/data/dev-v1.1.json

【问题讨论】:

  • 你到底想做什么? “在字典列表中使用 for 循环”并不是一个真正有用的描述。你是否试图遍历一个字典列表并对每个字典做一些事情?您发布的代码实际上没有多大意义,也没有显示您的目标。
  • 这是一个列表理解
  • 补充@Zinki 所说的内容:输入和输出示例会很棒。
  • 你能把错误信息也贴出来吗?
  • @Zinki 我正在尝试使用斯坦福大学的 SQuAD 数据集来制作问答系统。数据集包括 10 万个问题和答案。 (raw.githubusercontent.com/YerevaNN/R-NET-in-Keras/master/data/…) 来自 github 的原始代码:github.com/YerevaNN/R-NET-in-Keras/blob/master/parse_data.py 我正在尝试将其实现为土耳其语中的类似数据集。

标签: python json list parsing dictionary


【解决方案1】:

代码中的len(qa['answers'][0]['text']) 部分会引发错误,因为len() 需要一个字符串。您可以通过在 python 解释器中键入 len(3) 来验证自己。检查您的数据 qa['answers'] 数组中的 'text' 键是否在某处包含整数值。或者如果你真的想要整数,修改这段代码。

我从您提供的原始代码和数据中运行了该部分,并且它在没有抛出错误的情况下进行了解析。由于您提到您使用“类似”数据集,我假设您或其他人修改了内容...

(如果您提供原始您的数据集和代码,将会很有帮助)

【讨论】:

  • 感谢您的帮助。由于准备不足的数据集,类型错误是正确的。我在 json 文件中发现,有些部分是错误的。例如, answer_start 应该是一个整数,但它有字符串值等。
  • len 不仅需要str,还需要任何大小的对象(使用__len__ 方法实现)
猜你喜欢
  • 2017-04-05
  • 1970-01-01
  • 2021-07-06
  • 2020-03-02
  • 2015-10-30
  • 2020-04-03
  • 2019-04-09
  • 2018-04-18
  • 1970-01-01
相关资源
最近更新 更多