python: поиск списка объектов по определенному значению атрибута - PullRequest
0 голосов
/ 04 мая 2019

У меня есть класс для твиттеров Twitter, который выглядит следующим образом, я думаю, что, вероятно, есть хорошее решение для этого

class tweet:

    def __init__(self, userName, likes, replys, retweets, message, ID):
        self.userName = userName
        self.likes = likes
        self.replys = replys
        self.retweets = retweets
        self.message = message
        self.lenMessage = len(self.message)
        self.mentions = self.message.count('@')
        self.hastags = self.message.count('#')
        self.ID = ID

И в моем main class у меня есть список такого родаобъект.Я хочу посмотреть в этом списке, есть ли в списке твиты с определенным идентификатором, и я просто не могу понять, как именно это сформулировать:

from Students import tweet


listoftweets = []

t1 = tweet("ding", 100, 5, 1,"a message",   1906961683)
t2 = tweet("dong" ,5, 5, 5, "another message", 190696969)
t3 = tweet("bang", 1, 1, 1, "anew message",2003)
t4 = tweet("fest" ,3, 3, 3,"a message", 1930)
listoftweets.append(t1)
listoftweets.append(t2)
listoftweets.append(t3)
listoftweets.append(t4)



# now if i wanted to check if there is a object with the attribute ID = 2003
#how would i do this?
if listoftweets.__contains__():
    print("the list does contain specified ID")

Спасибо всемочень много

Ответы [ 3 ]

1 голос
/ 04 мая 2019

Предложение: используйте namedtuples вместо. Следующие работы:

from collections import namedtuple

class Base:
    @property
    def lenMessage(self):
        return len(self.message)

    @property
    def mentions(self):
        return self.message.count('@')

    @property
    def hashtags(self):
        return self.message.count('#')

class Tweet(Base, namedtuple('BaseTweet', 'userName likes replies retweets message ID')):
    pass

listoftweets = [
    Tweet("ding", 100, 5, 1,"a message",   1906961683),
    Tweet("dong" ,5, 5, 5, "another message", 190696969),
    Tweet("bang", 1, 1, 1, "anew message",2003),
    Tweet("fest" ,3, 3, 3,"a message", 1930)
]

found = [tweet for tweet in listoftweets if tweet.ID == 2003]
print(found)

Это дает

[Tweet(userName='bang', likes=1, replies=1, retweets=1, message='anew message', ID=2003)]
1 голос
/ 04 мая 2019

Это то, что вы ищете?

for l in listoftweets:
    if l.ID == "###":  # ID to be matched
        print("List does contain specified ID")
        break
0 голосов
/ 04 мая 2019

Такой метод может помочь:

def get_tweet(id):
    for tweet in listoftweets:
        if tweet.ID == id:
            return tweet 
...