检查列表中是否存在字典键?

时间:2018-06-11 10:53:49

标签: python python-3.x

所以我是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

3 个答案:

答案 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