我对我的作业问题有疑问。这是问题所在: 编写一个程序,读取一个名为input.txt的文本文件,其中包含任意数量的形式为“,”的行,然后使用字典记录此信息,最后向屏幕输出文件中所代表的国家列表和数字包含的城市。
例如,如果input.txt包含以下内容:
纽约,美国
昂热,法国
洛杉矶,美国
波城,法国
法国敦刻尔克
沙特阿拉伯麦加
程序将输出以下内容(按某种顺序):
沙特阿拉伯:1
美国:2
法国:3
这是我的代码:
def addword(w,wcDict):
if w in wcDict:
wcDict[w] +=1
else:
wcDict[w]= 1
import string
def processLine(line, wcDict):
wordlist= line.strip().split(",")
for word in wordlist:
word= word.lower().strip()
word=word.strip(string.punctuation)
addword(wordlist[1], wcDict)
def prettyprint(wcDict):
valkeylist= [(val,key) for key,val in wcDict.items()]
valkeylist.sort(reverse = True)
for val,key in valkeylist:
print '%-12s %3d'%(key,val)
def main():
wcDict={}
fobj= open('prob1.txt','r')
for line in fobj:
processLine(line, wcDict)
prettyprint (wcDict)
main()
我的代码对每个国家/地区计算两次。你能帮我吗?
谢谢
答案 0 :(得分:2)
在processLine
函数中,你有一个无关的循环。 wordlist
将始终包含两个条目,即城市和国家/地区。因此,for循环中的代码(包括addword
)将被执行两次 - 您可以完全删除for
语句,它应该按预期工作。
答案 1 :(得分:0)
from collections import Counter as c
lines = (line.strip() for line in open("file.txt"))
data = (elem for elem in lines)
result = [two for one in data for two in one.split(",")]
c = Counter()
c(result)
我希望我回答你的问题