Я учусь Python, и я наткнулся на то, что сам не могу понять.
У меня есть текстовый файл mbox-short.txt
со строками вроде:
From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008
Return-Path: <postmaster@collab.sakaiproject.org>
Received: from murder (mail.umich.edu [141.211.14.90])
From louis@media.berkeley.edu Fri Jan 4 18:10:48 2008
Return-Path: <postmaster@collab.sakaiproject.org>
Received: from murder (mail.umich.edu [141.211.14.97])
From zqian@umich.edu Fri Jan 4 16:10:39 2008
Return-Path: <postmaster@collab.sakaiproject.org>
Received: from murder (mail.umich.edu [141.211.14.25])
Следующий код работает нормально:
x = open('mbox-short.txt')
y = dict()
count = int()
for line in x: # read every line of <file>
if line.startswith('From '): # check if <line> starts with <'From '>
line1 = line.split(' ') # split <line> into separate words -> <line1>
count = count + 1 # count every <'From '> occurence
w = line1[1] # 2nd word of <line1>
if w not in y: # check if 2nd word of <line1>(=w) is already in dict <y>
y[w] = 1 # add 2nd word of <line1> as key with <value>=1
else:
y[w] += 1 # or +1 to <value>
print(y)
Он работает, даже когда на старте y
по-прежнему пустой диктант.
Вывод:
{'stephen.marquard@uct.ac.za': 2, 'louis@media.berkeley.edu': 3, ... 'ray@media.berkeley.edu': 1}
В учебном пособии, с которым я работаю, есть еще один пример, использующий метод .get
:
word = 'brontosaurus'
d = dict()
for c in word:
d[c] = d.get(c,0) + 1
print(d)
Когда я пытаюсь это сделать:
x = 'file'
y = dict()
count = int()
for line in x: # read every line of <file>
if line.startswith('From '): # check if <line> starts with <'From '>
line1 = line.split(' ') # split <line> into separate words -> <line1>
count = count + 1 # count every <'From '> occurence
w = line1[1] # 2nd word of <line1>
for w in y: # alternate + simplified form using <dict.get> method
y[w] = y.get(w,0) + 1 # check if <w> is already in dict y, if not, add it
print(y)
Сбой. Вывод:
{}
Используя отладчик, я вижу, что for w in y:
l oop не выполняется. Это просто выскакивает в y
.
Я не понимаю, почему.