我有一個類的所有實體的串列。我想在給定屬性值的情況下找出該串列中實體的索引。
例如。我有以下代碼:
class Test():
all_objects=[]
def __init__(self,name,age):
self.name = name
self.age = age
Test.all_objects.append(self)
Test("joe",23)
Test("kate",16)
Test("adam",56)
#this is ugly ..
for ind,item in enumerate(Test.all_objects):
if item.name == 'joe':
print(ind)
我可以通過迭代串列中的每個元素來找到實體的索引。有一個更好的方法嗎?(也許以某種方式使用 index() 方法)
澄清:
我正在尋找一種方法來做到這一點,而不必遍歷all_objects串列。看看下面的評論和答案,似乎沒有辦法解決這個問題。
我感謝大家為我確認這一點。
uj5u.com熱心網友回復:
使用函式式編程 ?
my_filter = filter(lambda x: x[1].name == 'joe', enumerate(Test.all_objects))
print(next(my_filter)[0])
一個班輪 ?
print(next(filter(lambda x: x[1].name == 'joe', enumerate(Test.all_objects)))[0])
Not Found沒有找到指定實體時列印一張紙?
print(next(filter(lambda x: x[1].name == 'joe', enumerate(Test.all_objects)))[0], 'Not Found')
uj5u.com熱心網友回復:
如果您想多次搜索,可以使用name及其關聯物件創建一個字典:
objects = {i.name: i for i in Test.all_objects}
現在您可以按名稱訪問物件:
a = objects['joe']
顯然,如果有多個相同的物件,name您可以通過使用 defaultdict 來克服這個問題:
from collections import defaultdict
objects = defaultdict(list)
for i in Test.all_objects:
objects[i.name].append(i)
現在每個鍵都有一個物件串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/371030.html
