[英]Generate a list of indices by matching items in a master list in python
新手問題:假設我有一些類別和數據:
categories = ['cow', 'pig', 'rat', 'hen', 'dog', 'cat']
data = ['hen', 'cat', 'pig', 'hen', 'dog', 'cow', 'cat', 'dog', 'rat', 'hen' ]
如何生成數據的數字標簽列表,其中 label 是類別主列表中數據項的索引? 也就是說,生成列表[3, 5, 1, 3, 4, 0, 5, 4, 2, 3 ]
... 這當然不是由此產生的:
label = [index for item in data if categories[index] == item] # useless!!
我知道可以使用 scikit-learn LabelEncoder
生成此列表。 如何在純 python 中完成?
您可以嘗試列表index
function:-
categories = ['cow', 'pig', 'rat', 'hen', 'dog', 'cat']
data = ['hen', 'cat', 'pig', 'hen', 'dog', 'cow', 'cat', 'dog', 'rat', 'hen' ]
res = []
for i in data:
if i in categories:
res.append(categories.index(i))
else:
res.append(-1)
print(res)
Output 將是:-
[3, 5, 1, 3, 4, 0, 5, 4, 2, 3]
也許這是過早的優化,但我可能會首先將類別名稱 map 到索引中,以避免對所有類別進行雙重嵌套循環:
categories = ['dog', 'fish', 'tree', 'toad']
data = ['toad', 'tree', 'dog', 'fish', 'toad', 'toad']
m = { name : idx for idx,name in enumerate(categories) }
print([ m[n] for n in data])
嘗試這個。 它將處理類別列表中不存在的項目。 它將為這些元素賦予-1
值。
categories = ['cow', 'pig', 'rat', 'hen', 'dog', 'cat']
data = ['hen', 'cat', 'pig', 'hen', 'dog', 'cow', 'cat', 'dog', 'rat', 'hen' ]
print([categories.index(i) if i in categories else -1 for i in data])
你在正確的軌道上。 您需要使用列表查找 function, index
:
[categories.index(name) if name in categories else "missing"
for name in data]
Output:
[3, 5, 1, 3, 4, 0, 5, 4, 2, 3]
你可以試試這個:
def solve(categories, data):
index_dict = dict(zip(categories, range(len(categories))))
return [index_dict.get(i, "Not Found") for i in data]
categories = ['cow', 'pig', 'rat', 'hen', 'dog', 'cat']
data = ['hen', 'cat', 'pig', 'hen', 'dog', 'cow', 'cat', 'dog', 'rat', 'hen' ]
for i in range(0,len(categories)):
for j in range(0,len(data)):
if categories[i]==data[j]:
data[j]=i
這可能會有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.