Python 3.x 以最少的时间和代码复杂度在python列表中查找项属性的正确方法

Python 3.x 以最少的时间和代码复杂度在python列表中查找项属性的正确方法,python-3.x,Python 3.x,我有一份供应商名单 suppliers=[]其中我有n个元素,大致如下:例如[{“supplierId”:“1”,“aCode”:2},{“supplierId”:“1”,“aCode”:3}] 现在,我需要根据属性的值进行检查,比如说areaCode=2,并且需要检查区号是否在名为aCode的供应商列表中我如何以最小的时间和代码复杂度以及不使用for循环来确定区号的存在,因为我将在供应商数组中拥有大量数据。内部项目是字典,它们可以通过键引用 def main(): list1=[{"s

我有一份供应商名单

suppliers=[]
其中我有n个元素,大致如下:例如
[{“supplierId”:“1”,“aCode”:2},{“supplierId”:“1”,“aCode”:3}]


现在,我需要根据属性的值进行检查,比如说
areaCode=2
,并且需要检查区号是否在名为
aCode
的供应商列表中
我如何以最小的时间和代码复杂度以及不使用for循环来确定区号的存在,因为我将在供应商数组中拥有大量数据。

内部项目是字典,它们可以通过键引用

def main():
    list1=[{"supplierId":"1","aCode":2},{"supplierId":"1","aCode":3}]
    searchKey=2
    for item in list1:
        if item['aCode']==searchKey:
            print(item)

if __name__== "__main__":
    main()

在您的情况下,因为它是一个dict的列表,所以很难不使用循环。如果您只想查看它是否存在,您可以将其设置为一行,例如:

print(any(areaCode==x['aCode'] for x in suppliers))
或者,如果您想要这些条目,您可以这样一行:

suppliers_in_area = [x for x in suppliers if x['aCode'] == areaCode]
这两个版本都需要一个
for
循环,速度都一样快,但第一个版本需要的内存最少

-编辑-

如果第一次出现时只有一个(或如果只有一个元素存在),则将
短路至
循环

def get_supplier_by_area(area_code):
    for supplier in suppliers:
        if supplier['aCode'] == area_code:
            return supplier
    # It will return None if nothing is found
或者,如果希望每次调用函数时都返回
下一个
供应商,则可以使用生成器

def get_supplier_by_area(area_code):
    for supplier in suppliers:
        if supplier['aCode'] == area_code:
            yield supplier
try:
    gen = get_supplier_by_area('A01')
    print(next(gen)) # will print the first result or will raise a StopIteration error
    print(next(gen)) # will print the second result or will raise a StopIteration
except StopIteration:
    print("No more results")

你只是想看看它是否存在吗?或者打印结果(如果存在)?for循环将是最快的。您可以通过将循环留给另一个函数来完成一行,但它不如常规循环快。根据我有限的知识,如果没有循环/递归,就无法搜索包含多个值的数据结构,这是一种编程构造,通常不是一件坏事。为了提高性能,您可以使用
pandas
In
在Python实现中运行后台循环,通常比普通
for
循环快得多(但是PyPy有快速循环)谢谢。这将有助于开始。将更新,因为有多个条件,我加入和检查从各种列表,并在此基础上,我需要创建一个响应,你可能会考虑把它变成一个<代码> DIST<代码> <代码> DISTS < /代码>。然后你可以在路上做更快的循环。如果我只想要其中的一项,我如何修改你上面共享的代码。假设我想避免使用类似索引的代码0@divyanayanawasthi你能提供一个更好的例子吗?你想返回第一个结果吗?或者要返回除索引0以外的所有结果?我不理解你的评论。我想说的是,我的列表中总会有一个项目是有效的,因此我不想使用数组[0]来获取该元素,而是希望得到一个更好的结构。到目前为止,我使用的是-->有效的供应商=下一个((如果best_buy['xxxx',供应商中的供应商对供应商)==supplier.xxxx\和百思买['yyy']==supplier.yyyy),无)