计算嵌套lis中的所有元组元素

2024-04-24 10:37:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我想得到嵌套列表中所有元素的计数。 nested_lst = [[('NOUN', 'shoe'), ('NOUN', 'shirt'), ('NOUN', 'jacket')], [('VERB', 'jump')], [('NOUN', 'shoe'), ('NOUN', 'shirt'), ('ADJ', 'fancy')]]

我的预期结果是:

{'NOUN': 5, 'shoe': 2, 'shirt':2, 'VERB': 1, 'jump': 1, 'jacket': 1, 'ADJ': 1, 'fancy':1}

我当前的代码:Counter(itertools.chain(*nested_lst)),它生成元组计数而不是每个元素。你知道吗


Tags: 代码元素列表counternested计数fancynoun
3条回答

你很接近。只需对chain返回的值进行另一次迭代即可获得所需的输出:

from collections import Counter
from itertools import chain

nested_lst = [[('NOUN', 'shoe'), ('NOUN', 'shirt'), ('NOUN', 'jacket')], [('VERB', 'jump')], [('NOUN', 'shoe'), ('NOUN', 'shirt'), ('ADJ', 'fancy')]]

print(Counter(y for x in chain.from_iterable(nested_lst) for y in x))
# Counter({'NOUN': 5, 'shoe': 2, 'shirt': 2, 'jacket': 1, 'VERB': 1, 'jump': 1, 'ADJ': 1, 'fancy': 1})

应用chain两次以除去内部元组

from itertools import chain
from collections import Counter
Counter(chain(*chain(*nested_lst)))

或者

Counter(chain.from_iterable(chain.from_iterable(nested_lst)))

输出:

Counter({'ADJ': 1,
         'NOUN': 5,
         'VERB': 1,
         'fancy': 1,
         'jacket': 1,
         'jump': 1,
         'shirt': 2,
         'shoe': 2})
In [2]: for i in nested_lst:
   ...:     for j in i:
   ...:         for k in j:
   ...:             d[k] = d.setdefault(k, 0) + 1
   ...:

In [3]: d
Out[3]:
{'ADJ': 1,
 'NOUN': 5,
 'VERB': 1,
 'fancy': 1,
 'jacket': 1,
 'jump': 1,
 'shirt': 2,
 'shoe': 2}

相关问题 更多 >