2012-04-03 9 views
-1

Es folgt der Inhalt einer Datei, Meine Frage ist, wie die Anzahl der Vorkommen für das Wort „optimus“ fürCount Vorkommen eines Wortes durch ID in Python

unterschiedliche IDs zählen
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.. 

Ausgabe sein sollte

ID67:4 
ID12120 
ID5552:1 
+0

Bitte lassen Sie uns wissen, was nähern Sie haben gewählt und warum es nicht funktioniert wie erwartet. – Fenikso

Antwort

1

eine Möglichkeit ist es, ein defaultdict für die Grafen zu verwenden:

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") 
+0

Sie sollten 'Counter' statt' defaultdict' verwenden und sollten auch keinen eingebauten Namen 'id' als Variable verwenden. – Kimvais

+0

@Kimvais: Ich stimme nicht zu. Sie können auch 'Counter' verwenden, aber in diesem speziellen Fall ohne Vorteil. –

+0

Ich stimme nicht überein, ob es einen Vorteil gibt - es ist offensichtlich für _anyone_, dass Sie es zum Zählen verwenden werden, wenn es ein 'Counter' ist, was __nicht__ der Fall für' defaultdict (int) 'ist. – Kimvais

1
>>> from collections import Counter 
>>> c = Counter() 
>>> for line in chat.txt: 
...  c[line.strip().split(" ",1)[0]] += line.count("Optimus") 
>>> c 
Counter({'ID67': 5, 'ID5552': 1, 'ID12120': 1, '': 0}) 

und Sie können die Werte als ausdrucken:

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

Ich mag mehr Svens Codierung innerhalb der Schleife. – KurzedMetal

Verwandte Themen