![](/img/trans.png)
[英]How to loop through an array of lists, check an element within each list and compare to a value and if it matches the value return the key
[英]check array for matches in dictionary value and return key
我有一本看起來像這樣的字典:
{0: array([1, 0]), 1: array([0, 1])}
我也有一個看起來像這樣的數組:
[[1 0]
[1 0]
[0 1]
[0 1]
[1 0]
[1 0]
[0 1]
[1 0]]
我想檢查我的數組在字典值中是否匹配,以便它返回列表中的鍵:
[0,0,1,1,0,0,1,0]
import numpy as np
# Input data
d = {0: np.array([1, 0]), 1: np.array([0, 1])}
a = np.array([[1, 0], [1, 0], [0, 1], [0, 1], [1, 0], [1, 0], [0, 1], [1, 0]])
# Solve task
rd = {tuple(v) : k for k, v in d.items()}
ra = [rd[tuple(e)] for e in a]
print(ra)
Output:
[0, 0, 1, 1, 0, 0, 1, 0]
(非常)低效的 O(n) 解決方案是每次遍歷字典並找到所需的鍵:
for key, value in dict.items():
# check for value and add key
但是更有效的方法是將值存儲在元組(0,1)
中,以便字典可以在 O(1) 時間內有效地直接訪問元組。
d = {(1,0): 0, (0,1): 1}
arr = [(1,0), (0,1)]
answer = [d[i] for i in arr]
當然,你仍然需要檢查字典本身是否存在元組,但上面的代碼片段只是一個簡單的實現
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.