【问题标题】:check array for matches in dictionary value and return key检查数组以查找字典值中的匹配项并返回键
【发布时间】:2021-07-04 07:00:28
【问题描述】:
我有一本像这样的字典:
{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]
【问题讨论】:
标签:
python
arrays
python-3.x
dictionary
【解决方案1】:
Try it online!
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)
输出:
[0, 0, 1, 1, 0, 0, 1, 0]
【解决方案2】:
(非常)低效的 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]
当然,你还是需要检查字典本身是否存在元组,不过上面的代码sn -p只是一个简单的实现