如何使用部分字符串进行搜索,以搜索带有字符串参数的对象列表并找到我要在Python中寻找的对象?

问题描述 投票:0回答:1

我正在创建的是一种商店。我可以使用多个参数将产品对象添加到所说的商店(也是一个对象),包括标题(字符串),描述(字符串)和product_number(整数)。

我想创建一个函数,该函数将一个字符串作为参数,该字符串可用于搜索库存(列表)中所有产品对象的标题和描述参数,查找匹配项(部分和全部,这无关紧要在这种情况下),请将那些匹配的对象附加到名为search_results的列表中,并按它们的product_number对其进行升序排序,然后将其返回给用户。

    class Product:

        def __init__(self, code, title, desc, price, quantity):
            self._code = code
            self._title = title
            self._desc = desc
            self._price = price
            self._quantity = quantity

        def decrease_quantity(self):
            self._quantity = self._quantity - 1

        def get_product_code(self):
            return self._code

        def get_product_title(self):
            return self._title

        def get_product_price(self):
            return self._price

        def get_product_quantity(self):
            return self._quantity

        def get_product_desc(self):
            return self._desc

    class Store:

        def __init__(self):
            self._store_inventory = []
            self._store_members = []

        def product_search(self, product_keyword):
            search_results = []
            for product in self._store_inventory:
                if product_keyword in product.get_product_title():
                    search_results.append(product)
                elif product_keyword in product.get_product_desc():
                    search_results.append(product)
                else:
                    return "Not Found"
            search_results.sort()
            return search_results

这是我到目前为止所拥有的。还有一个名为Product的附加类,用于创建我前面提到的产品对象,为简洁起见,为避免混淆,我没有将其包括在内。

我的主要问题(有几个,我知道)是我无法使product_search函数正常工作。也就是说,即使我给出产品名称的确切大小写和拼写,它也总是还原“ else”大小写并返回“ Not Found”。

我在这方面做错了什么?

python string list search
1个回答
0
投票

根据__eq__,您可能需要为product类实现功能docs

对于列表,元组,集合,frozenset,dict或collections.deque等容器类型,表达式x in y等效于any(x is e or x == e for e in y)

in运算符不起作用的原因是该类没有实现__eq__函数,因此Python不知道如何比较对象实例(要比较的属性,...)

阅读有关__eq__的更多信息

示例:

__eq__

输出:

class Foo:
    def __init__(self, a):
        self.a = a

class Bar:
    def __init__(self, a):
        self.a = a

    def __eq__(self, other):
        return self.a == other.a
f1 = Foo(5)
f2 = Foo(5)
print("f1 == f2", f1 == f2)
fl = [f1,f2]
f3 = Foo(5)
print("f3 in fl", f3 in fl)

g1 = Bar(5)
g2 = Bar(5)
print("g1 == g2",g1 == g2)
gl = [g1,g2]
g3 = Bar(5)
print("g3 in gl", g3 in gl)
© www.soinside.com 2019 - 2024. All rights reserved.