gpt4 book ai didi

python - 列表列表中项目的频率

转载 作者:行者123 更新时间:2023-11-28 22:15:07 26 4
gpt4 key购买 nike

我有一个名为 bi_grams 的列表列表,我想要每个二元组的频率。 bi_grams 的长度是 23087 所以我可能需要一个循环 (?)

bi_grams= [[('ABC', 'Memorial'), ('Memorial', 'Hospital')], [('ABC', 'Memorial'), ('Memorial', 'Clinic')]]

预期输出

dict_items([(('ABC', 'Memorial'), 2), 
(('Memorial', 'Hospital'), 1), (('Memorial', 'Clinic'),1])

我试过 Counter(map(tuple, bi_grams[0])).items()但它只给了我第一个列表的二元组频率。

我也试过 Counter(map(tuple, bi_grams[0:2])).items() 但它只给我每个列表的计数,而不是列表中的二元组列表。

非常感谢您的帮助。

最佳答案

您有一个嵌套列表,您可以使用 itertools.chain.from_iterable 将其展平.

除了这个复杂问题之外,问题归结为 collections.Counter 的简单应用因为 Counter 计算元组没有问题。

>>> from collections import Counter
>>> from itertools import chain
>>>
>>> bi_grams= [[('ABC', 'Memorial'), ('Memorial', 'Hospital')], [('ABC', 'Memorial'), ('Memorial', 'Clinic')]]
>>> Counter(chain.from_iterable(bi_grams))
>>>
Counter({('ABC', 'Memorial'): 2,
('Memorial', 'Clinic'): 1,
('Memorial', 'Hospital'): 1})

还有一个使用 for 循环的非常直接的解决方案:

>>> c = Counter()
>>> for x in bi_grams:
...: c.update(x)
...:
>>> c
>>>
Counter({('ABC', 'Memorial'): 2,
('Memorial', 'Clinic'): 1,
('Memorial', 'Hospital'): 1})

关于python - 列表列表中项目的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53015104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com