python如何基于对象的数据成员删除列表中的对象

python如何基于对象的数据成员删除列表中的对象,python,Python,所以我在下面创建了一个类,并将它的实例存储在一个列表中 class Word: def __init__(self,word,definition,synonyms): self.w=word self.defi=definition self.synonyms=synonyms 我确信我可以遍历列表并检查每个实例,但我正在尝试使用列表的remove方法来完成这项工作。 x是Word对象的列表 word="hi" x.remove(Wor

所以我在下面创建了一个类,并将它的实例存储在一个列表中

class Word:
    def __init__(self,word,definition,synonyms):
        self.w=word
        self.defi=definition
        self.synonyms=synonyms
我确信我可以遍历列表并检查每个实例,但我正在尝试使用列表的remove方法来完成这项工作。 x是Word对象的列表

word="hi"
x.remove(Word if Word.w==word)
这给了我一个错误。那么有没有类似的方法呢

编辑 我试图简化我的问题,但显然我的意图并不明确。 我有一本字典,它的键是单词的最后两个字母(用户添加的),它的值是包含最后两个字符的单词列表。例如:

w1=Word("lengthen","make something taller","some synonym")
w2=Word("woken","let someone wake up","some synonym")
w3=Word("fax","machine used for communication","some synonym")
w4=Word("wax","chemical substance","some synonym")
 ['en':(w1,w2),'ax':(w3,w4)] 
我试图定义一个delete方法,它使用字典和一个单词(字符串),然后它将删除包含以下单词的对象单词

def delete(dictionary,word):
    if word[-2:] in dictionary:
        x=dictionary[word[-2:]]
        if(x.count(word)!=0):
            x.remove(Word if Word.w==word)

通常,您会使用列表理解来构建一个没有匹配项的新列表,否则您会在迭代列表时尝试修改列表:

x = [word for word in x if word.w != "hi"]
注意小写的
单词
;使用
Word
对类本身进行阴影处理

如果就地更改列表至关重要,可以使用切片:

x[:] = [word for word in x if word.w != "hi"]

通常,您会使用列表理解来构建一个没有匹配项的新列表,否则您会在迭代列表时尝试修改列表:

x = [word for word in x if word.w != "hi"]
注意小写的
单词
;使用
Word
对类本身进行阴影处理

如果就地更改列表至关重要,可以使用切片:

x[:] = [word for word in x if word.w != "hi"]

我想这会满足你的要求:

class Word:
    def __init__(self,word,definition,synonyms):
        self.w=word
        self.defi=definition
        self.synonyms=synonyms
    def __repr__(self):  # added to facilitate printing of tuples of Word objects
        return 'Word({}, {}, {})'.format(self.w, self.defi, self.synonyms)

w1=Word("lengthen", "make something taller", "some synonym")
w2=Word("woken", "let someone wake up", "some synonym")
w3=Word("fax", "machine used for communication", "some synonym")
w4=Word("wax", "chemical substance", "some synonym")

dictionary = {'en': (w1, w2), 'ax': (w3, w4)}

def delete(dictionary, word):
    suffix = word[-2:]
    if suffix in dictionary:
        dictionary[suffix] = tuple(word_obj for word_obj in dictionary[suffix]
                                   if word_obj.w != word)

delete(dictionary, 'woken')
print(dictionary)

我想这会满足你的要求:

class Word:
    def __init__(self,word,definition,synonyms):
        self.w=word
        self.defi=definition
        self.synonyms=synonyms
    def __repr__(self):  # added to facilitate printing of tuples of Word objects
        return 'Word({}, {}, {})'.format(self.w, self.defi, self.synonyms)

w1=Word("lengthen", "make something taller", "some synonym")
w2=Word("woken", "let someone wake up", "some synonym")
w3=Word("fax", "machine used for communication", "some synonym")
w4=Word("wax", "chemical substance", "some synonym")

dictionary = {'en': (w1, w2), 'ax': (w3, w4)}

def delete(dictionary, word):
    suffix = word[-2:]
    if suffix in dictionary:
        dictionary[suffix] = tuple(word_obj for word_obj in dictionary[suffix]
                                   if word_obj.w != word)

delete(dictionary, 'woken')
print(dictionary)

由于
list.remove
可以正常工作,您可能需要执行
x[:]=[如果word.w!=“hi”]
。这将使列表对象保持不变。嗨,我想你误解了我,请检查我的编辑并感谢:)@RoudyTarabay这很好,使用
x[:]
版本,它将替换字典中的列表。由于
list.remove
工作正常,你可能需要执行
x[:]=[如果word.w!=“hi”
。这将保持列表对象不变。嗨,我想你误解了我,请检查我的编辑并感谢:)@RoudyTarabay很好,使用
x[:]
版本,它将替换字典中的列表。原因之一
remove()
不起作用,因为字典中的值是
tuple
s,而不是
list
s,tuple没有
remove()
方法,因为它们是不可变的。您需要更改值的类型,或者用新的元组对象替换现有值。一个原因是
remove()
不适用于您尝试执行的操作,因为字典中的值是
tuple
s,而不是
list
s,并且元组没有
remove()
方法,因为它们是不可变的。您需要更改值的类型或使用新的元组对象替换现有值。