从字典中检索类对象

时间:2015-02-04 16:15:24

标签: python dictionary

作为初学者的一部分'大学Python项目,我目前正在创建一个单词数据库,无论是名词,动词,确定者,形容词。

现在我遇到的问题是通过lexicon.readfromfile方法读入程序的单词是通过类的实例(可以是名词,动词或形容词)放入字典中的。这就产生了一个问题,我完全不知道如何从字典中调用这些对象,因为它们没有变量作为键,而是存储位置(参见下文):

{<__main__.Verb object at 0x02F4F110>, <__main__.Noun object at 0x02F4F130>, <__main__.Adjective object at 0x02F4F1D0>, <__main__.Noun object at 0x02F4F170>}

有没有人知道如何以这样的方式调用这些密钥,以便我可以在代码中使用它们?

这是我坚持的部分:

  

getPast()类添加方法Verb,该类返回Verb的过去时。通过从属性中检索“过去”的值,您的getPast()方法可以很简单。

以下是大多数代码,省略了NounAdjective类:

class Lexicon(object):
    'A container clas for word objects'

    def __init__(self):
        self.words = {}

    def addword(self, word):
        self.words[word.stringrep] = word

    def removeword(self, word):
        if word in self.words:
            del(word)
            print('Word has been deleted from the Lexicon' )
        else:
            print('That word is not in the Lexicon')


    def getword(self,wordstring):
        if wordstring in self.words:
            return self.words[wordstring]
        else:
            return None


    def containsword(self,string):
        if string in self.words:
            return True
        else:
            return False


    def getallwords(self):
        allwordslist = []
        for w in self.words:
            allwordslist.append(self.words[w])
        return set(allwordslist)

    def readfromfile(self, x):
        filehandle = open(x, 'r')
        while True:
            line = filehandle.readline()
            if line == '':
                break
            line = line.strip()
            info = line.split(',')
            if info[1] == 'CN' or info[1] == 'PN':
                noun=Noun(info[0],info[1])
                noun.setattribute('regular',bool(info[2]))
                self.addword(noun)
            elif info[1] == 'A':
                adjective=Adjective(info[0],info[1])
                adjective.setattribute('comparative', bool(info[2]))
                self.addword(adjective)
            elif info[1] == 'V':
                verb=Verb(info[0],info[1])
                verb.setattribute('transitive', bool(info[2]))
                verb.setattribute('past', info[3])
                self.addword(verb)




    def writetofile(self, x):
        filehandle = open(x, 'w')

        for t in self.words.values():
            filehandle.write(t.getFormattedString() + '\n')
        filehandle.close()
#---------------------------------------------------------------------------#           

class Word(object):
    'A word of any category'

    def __init__(self,stringrep,category):
        self.wordattribute = {}
        self.stringrep = stringrep
        self.category = category

    def setattribute(self, attributename, attributevalue):
        self.wordattribute[attributename] = attributevalue

    def getvalue(self,name):
        if name in self.wordattribute:
            return self.wordattribute[name]
        else:
            return none


    def __str__(self):
        return self.stringrep + ':' + self.category

    def __lt__(self,otherword):
        return self.stringrep < otherword.stringrep

class Verb(Word):
    '"Represents a Verb."'

    def __init__(self, stringrep, category):
        super().__init__(stringrep,category)

    def istransitive(self):
        return self.transitive

    def getFormattedString(self):
        n = '{stringrep},{category}' 
        n = n.format(stringrep=self.stringrep, category=self.category)
        for i in range(1,2):
            for v,b in self.wordattribute.items():
                n = n+','+str(b)
        return n

1 个答案:

答案 0 :(得分:0)

你有set,而不是字典。 set将让您快速轻松地检查给定实例是否在集合中,但是,正如您所发现的,除非您已经知道它是什么,否则您无法轻易地获取特定值。那没关系,因为那不是set的用途。

使用字典,将键添加到字典时将其与值相关联。然后使用该键将值恢复。因此,创建一个字典而不是一个集合,并使用有意义的键,以便您可以轻松地获取值。

或者,因为我看到你在将它转换为集合之前已经在制作一个列表,所以只需返回它;您可以通过索引轻松访问列表中的项目。换句话说,不要首先创建问题,否则你就不会有问题。