在python中按ID统计单词的出现次数

在python中按ID统计单词的出现次数,python,string,count,Python,String,Count,下面是一个文件的内容,我的问题是如何计算不同ID的单词“optimus”的出现次数 ID67 DATEUID Thank you for choosing Optimus prime. Please wait for an Optimus prime to respond. You are currently number 0 in the queue. You should be connected to an agent in approximately TIMEUID.. Y

下面是一个文件的内容,我的问题是如何计算不同ID的单词“optimus”的出现次数

    ID67    DATEUID Thank you for choosing Optimus prime. Please wait for an Optimus prime to respond. You are currently number 0 in the queue. You should be connected to an agent in approximately TIMEUID.. You are now chatting with AGENTUID   0
    ID67    Optimus MEMORYUID Hi there! Welcome to Optimus prime Web Chat. How can I help you today?        1       
    ID67    Optimus DATEUID I like to pay  prepaid from CURRENCYUID with NUMBERUID expiry on whateve date. my phone no is PHONEUID 2
    ID12120 0 0 0 is the number. They are open 0/0 so you can ring them anytime. SMILEUID   1
    ID12120 Thanks Optimus, I will give them a call. Thanks for your help! HELPUID  2
    ID5552  is the number. They are open 0/0 so you can ring them anytime. SMILEUID 1
    ID5552  Thanks Optimus, I will give them a call. Thanks for your help! HELPUID  2

for line in chat.txt:
   print line, ####print lines and count optimus word for the particular id..
输出应该是

ID67:4
ID12120
ID5552:1

一种方法是对计数使用
defaultdict

from collections import defaultdict
d = defaultdict(int)
with open("chat.txt") as f:
    for line in f:
        id, data = line.split(None, 1)
        d[id] += data.lower().count("optimus")
您可以将值打印为:

>>> for k, v in c.items():
...     print("{}:{}".format(k, v))
... 
:0
ID67:5
ID5552:1
ID12120:1

请告诉我们您选择了什么方法,以及为什么它没有按预期工作。您应该使用
计数器而不是
defaultdict
,也不应该使用内置名称
id
作为变量。@Kimvais:我不同意。您也可以使用
计数器
它,但在这种特殊情况下没有任何优势。我不同意是否有优势-很明显,如果它是
计数器
,您将使用它进行计数,这与
defaultdict(int)不同
。我更喜欢Kimvais对计数器的使用。但计数器只有在python 2.6.5之后才可用,所以可能是Sven Marnach是对的……我更喜欢Sven在循环中的编码。
>>> for k, v in c.items():
...     print("{}:{}".format(k, v))
... 
:0
ID67:5
ID5552:1
ID12120:1