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),无)