【问题标题】: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只是一个简单的实现

    【讨论】:

      猜你喜欢
      • 2018-08-13
      • 2020-08-07
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多