比较列表中对象的属性?

2024-10-04 05:23:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将textMessage对象的列表排序为多个列表。 每个textMessage都有三个字段—发送方的地址、发送时间和消息正文。在

我有listOfContacts,它包含Contact对象。每个Contact对象有两个字段-联系人的name和该联系人的listOfTextslistOfTexts中填充了textMessage对象的列表。在

我的排序函数有问题。给定一个文本列表,如果联系人还不在列表中,我希望它向Contact添加一个新的Contact对象。否则,我想将textMessage对象附加到Contact内部的listOfTexts

我很难确定联系人是否已经存在于listOfContacts

def sortObjectArray(textArray):
    listOfContacts = []
    emptyList = []
    for text in TextArray:                    # For each text in the sorted array
        if text.address in listOfContacts.name:    # if the text's address is in list of contacts
            addText(text)                           # add the text to the list of texts in contact's class
        else:
            listOfContacts.append(Contact(text.get("address"), emptyList) #if address not in list of contacts, construct one with an empty list of texts.

我认为if text.address in listOfContacts.name应该检查Contact中是否存在name字段为{}的{},其中n是短信的发送者。在

我是不是走错了路?在


Tags: ofthe对象textnamein列表if
2条回答

列表对象没有包含对象的属性。请考虑以下绝对有效的python列表:

^{1}$

告诉我为什么

^{pr2}$

应该有明确的行为。在

您要做的是使列表中的对象按其名称散列,然后用它们构建一个set。在

EDIT:散列意味着您实现了__hash__函数,在本例中可能只是

class Contact(object):
    def __hash__(self):
        return self.name.__hash__

另外,您应该定义一个__eq__函数(eq like equality),以便python可以检查两个触点是否相等:

    def __eq__(self,other):
         return self.name==other.name

一旦完成了这些,就可以使用set类型,它与list类型一样,但只允许一个“相等”对象。这对联系人列表很有意义!完成后,您只需创建一个虚拟接触对象并检查它是否在集合中。在

否则,您只需迭代所有这些:

if any(text.address == cont.name for contact in listOfContacts):

编辑:它只检查联系人的any是否具有与您的text.address相等的name属性。在

您可能会遇到的第一个问题是listOfContacts没有name属性,因为它是一个列表而不是Contact对象。您可以创建一个新的联系人姓名列表,用于检查该地址是否已存在。在

^{1}$

相关问题 更多 >