我正在尝试计算出现在另一个列表(Y)中的一个列表(X)的单词。我正在迭代的列表在一个字符串中有多个单词。
示例:
X = ['abc def ghi klm', 'xyz bef mno', 'jkl mno pqr abc', 'xyz mno def']
Y = ['def', 'xyz', 'abc', 'tuv']
OUTPUT应该是这样的:
Y项目数:
def = 2
xyz = 2
abc = 2
我尝试了什么:
for obj in X:
for item in Y:
if obj in item:
freq = obj.count(item)
print (freq)
我也尝试了列表理解,但我认为情况并非如此。
答案 0 :(得分:2)
使用内置sum()
功能的短单行解决方案:
x = ['abc def ghi klm', 'xyz bef mno', 'jkl mno pqr abc', 'xyz mno def']
y = ['def', 'xyz', 'abc', 'tuv']
result = {i: sum(w.count(i) for w in x) for i in y}
print(result)
输出:
{'def': 2, 'xyz': 2, 'tuv': 0, 'abc': 2}
<强> ---------- 强>
或collections.Counter
对象:
import collections
x = ['abc def ghi klm', 'xyz bef mno', 'jkl mno pqr abc', 'xyz mno def']
y = ['def', 'xyz', 'abc', 'tuv']
c = collections.Counter(' '.join(x).split())
result = {i: c[i] for i in y if i in c}
print(result)
输出:
{'abc': 2, 'def': 2, 'xyz': 2}
答案 1 :(得分:1)
你可以做的是迭代X列表,操纵你的字符串以分隔空格(这样你将每个单词分开)然后使用Counter类来创建一个dict,它只计算Y中存在的项目的出现次数
function callfun(value) {
if(value == "paragraph1") {
// do something
} else if(value == "paragraph2") {
// do something
} else if(value == "paragraph3") {
// do something
} else {
// do something
}
}
答案 2 :(得分:0)
不确定我是否得到了您所需要的(在您的示例中不应该def = 2
?),但我认为这可能接近您的需求:
from collections import defaultdict
from itertools import product
counts = defaultdict(int)
for x, y in product(X, Y):
if y in x:
counts[y] += 1
您可以通过运行来检查输出:
for k, v in counts.items():
print('{} = {}'.format(k, v))
打印:
def = 2
abc = 2
xyz = 2