包含对象属性和打印/返回对象Python的搜索列表

时间:2013-10-04 03:22:31

标签: python search object filter lambda

我有一个对象,我正在搜索属性title是否与我的搜索匹配

class Something(object):
    def __init__(self,title):
        self.title = title

    def __str__(self):
        return "%s is the title " % self.title

如何在调用对象时打印对象?我正在寻找它。

search = " ".join(s[1:]).lower()
if any(search in str(a.title).lower() for a in something):
    print filter(lambda x: search in str(x.title),something)

If any(...)将检查搜索的任何部分是否与我的对象标题匹配,如果找到任何内容则返回true。


filter(...)打印对象,但这里是我遇到问题打印的对象:


[<__main__.Something object at 0x0000000002C93B38>, <__main__.Something object at 0x0000000002D33828>]


我知道这是一个对象,为什么不通过__str__(self)方法打印?如何从对象Something中唤起打印功能?

2 个答案:

答案 0 :(得分:0)

通常,我会先创建一个过滤器,以获取符合条件的项目。然后我会迭代它并用它做任何你想做的事情:

generator = (x for x in something if search in str(x.title).lower())
for item in generator:
   print item

这里的优点是你提前进行过滤(没有filter),你只进行一次过滤测试。

答案 1 :(得分:0)

您正在打印列表的字符串表示形式,而不是列表中的每个项目。

你可以这样做:

print map(str, filter(lambda x: search in str(x.title),something))