所以我是Python的中级初学者,我想知道我是否在这段代码中走在正确的轨道上。在学校我被分配了一个文件压缩任务,我们必须在其中制作我们自己的算法来压缩文本文件。对于此代码的结尾部分,我需要迭代列表并检查其中是否存在任何dict键,如果为True,则将列表项转换为dict的值。任何人都可以告诉我,我是否走在正确的轨道上?
commonwords = {'the' : '@', 'of' : '$', 'to' : '%','and' : '^', 'you' :
'&', 'because' : '#', 'in' : '*', 'it' : '(', 'is' : ')', 'they' : '=',
'are' : '+', 'this' : '!','but' : ',', 'have' : '.', 'by' : '/'}
def compress(file):
file_obj = open(file,"r")
file_contents = file_obj.read().split()
for word in file_contents:
if commonwords.keys() in file_contents:
file_contents[i] == commonwords[i]
return file_contents
答案 0 :(得分:0)
不太对劲。您似乎在文件中迭代单词,但从不检查单词是否是字典键。代码中的i
最初未初始化,并且会导致未定义的错误,并且还要注意,对于赋值,使用赋值运算符=
而不是相等运算符。
我建议使用此代码,这可以解决您的问题:
commonwords = {'the' : '@', 'of' : '$', 'to' : '%','and' : '^', 'you' : '&', 'because' : '#', 'in' : '*', 'it' : '(', 'is' : ')', 'they' : '=', 'are' : '+', 'this' : '!','but' : ',', 'have' : '.', 'by' : '/'}
def compress(file):
file_obj = open(file,"r")
file_contents = file_obj.read().split()
for x, word in enumerate(file_contents):
if word in commonwords:
file_contents[x] = commonwords[word]
file_obj.close()
return file_contents
注意此处使用enumerate
。它可以帮助您在迭代列表元素时跟踪索引。
答案 1 :(得分:0)
如果我说得对,你想检查file_contents中的任何单词是否是常用词中的键?
你可以做到
for word in file_contents:
if word in commonwords:
word.replace(word, commonwords[word])
如果您输入“in file_contents”,Python会理解您的意思是键。
答案 2 :(得分:0)
关闭但没有雪茄......你想要的是检查文件的word
是否在commonwords
中,而不是commonword.keys()
的列表是否包括在内(逐字)在file_contents
:
def compress(file):
with open(file,"r") as f:
words = f.read().split()
for i, word in enumerate(words):
if word in commonwords:
words[i] = commonwords[word]
return words