在嵌套对象中获取总和

Posted

技术标签:

【中文标题】在嵌套对象中获取总和【英文标题】:Getting a total sum in a nested object 【发布时间】:2021-05-15 11:29:19 【问题描述】:
with jsonlines.open('myfile.jsonl') as readfile:
    for contents in readfile:
        print (len(contents['tokens']))
  

所以,我有一个 jsonl 文件,其中每一行都是一个包含列表、字典、字符串和整数的字典。我想遍历每行列表的 len() 并获得总长度。所以这里的代码给了我: 4 11 7 12 9 7 14 9 10 10 4 8

但是当我尝试 sum() 或 count() 或任何我得到的东西时,我想要一个总数,abd

TypeError: 'int' 对象不可迭代

每个 jsonl 行看起来像这样,所以你可以看到它非常嵌套。我想计算每一行上每个“令牌”键的 len() 并将它们加在一起。

“text”:”full text...”,"","_input_hash":-随机数,"_task_hash":-随机数,"tokens":["text":"word ","start":number,"end":number,"id":number,"ws":true or false,"text":"word","start":number,"end":number, "id"number,"ws":true or false...],"_session_id":"dataset name-annotator name","_view_id":"ner_manual","spans":["start":number, "end":number,"token_start":number,"token_end":number,"label":"POS 标签","answer":"accept"

【问题讨论】:

请显示您的引发错误的代码以及输入 json 的相关 sn-p 【参考方案1】:

你可以简单地累加长度:

with jsonlines.open('myfile.jsonl') as readfile:
    total = 0
    for contents in readfile:
        total += len(contents['tokens'])
    print(total)

或者在适当的生成器表达式上使用sum

with jsonlines.open('myfile.jsonl') as readfile:
    total = sum(len(contents['tokens']) for contents in readfile)
    print(total)

【讨论】:

【参考方案2】:

pythonic 的解决方案是使用生成器表达式,即可以被函数使用的 for 循环:

with jsonlines.open('myfile.jsonl') as readfile:
    total_tokens = sum(len(contents['tokens']) for contents in readfile)
    print(total_tokens)

【讨论】:

以上是关于在嵌套对象中获取总和的主要内容,如果未能解决你的问题,请参考以下文章

使用Javascript的数组中嵌套对象值的总和

你会如何解决这个问题?使用reduce方法计算此数组中嵌套对象值的总和?

Mongoose:通过 findOneAndUpdate 查询使用嵌套对象数组的总和更新父子数据属性不起作用

Spring data mongodb - 获取对象数组的总和

下划线 - 从数组中获取相同的值对象总和

MongoDB在对象数组中获取嵌套在对象数组中的单个对象