。假定的話需要單獨(即,要算的話,通過str.split()
製造)發現:
編輯:按照意見提出,計數器是一個很好的選擇,在這裏:
from collections import Counter
def count_many(needles, haystack):
count = Counter(haystack.split())
return {key: count[key] for key in count if key in needles}
,哪個跑得像這樣:
count_many(["foo", "bar", "baz"], "testing somefoothing foo bar baz bax foo foo foo bar bar test bar test")
{'baz': 1, 'foo': 4, 'bar': 4}
注意的是Python < = 2.6,你將需要使用return dict((key, count[key]) for key in count if key in needles)
由於T(?)他缺乏對詞典的理解。
當然,另一種選擇是簡單地返回整個Counter
對象,並且只在需要時獲取所需的值,因爲根據具體情況,獲取額外值可能不成問題。
老答案:
from collections import defaultdict
def count_many(needles, haystack):
count = defaultdict(int)
for word in haystack.split():
if word in needles:
count[word] += 1
return count
導致:
count_many(["foo", "bar", "baz"], "testing somefoothing foo bar baz bax foo foo foo bar bar test bar test")
defaultdict(<class 'int'>, {'baz': 1, 'foo': 4, 'bar': 4})
如果您大大對象得到一個defaultdict回來(你不應該,因爲它的功能完全一樣的字典當訪問),那麼你可以做return dict(count)
而不是獲得一個正常的字典。
用空格分隔單詞嗎?如果是,那麼從集合中導入計數器' – DrTyrsa 2012-02-29 12:01:41
「似乎效率很低。對於每個添加到列表中的額外單詞」...「要清楚:單詞列表是恆定的。 – wim 2012-02-29 12:09:29