簡體   English   中英

檢查數組以查找字典值中的匹配項並返回鍵

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM