【问题标题】:Check if a matrix is in a dictionary list检查矩阵是否在字典列表中
【发布时间】:2014-06-15 17:13:40
【问题描述】:

我在 python 中有一个列表字典,我想检查一个矩阵是否已经在字典中。

C = {0: [matrix([[ 8.87155979,  2.50616085]]), matrix([[ 0.46289077,  8.05592104]])], 
     1: [matrix([[-1.3115368 ,  7.60922069]])], 
     2: [matrix([[ 0.46289077,  8.05592104]]), matrix([[-1.3115368 ,  7.60922069]]), matrix([[ 3.4826805 , -0.73544937]])]}

这个输入应该返回true: [[ 8.87155979, 2.50616085]] in C 我该怎么做?

【问题讨论】:

  • 这是一个numpy矩阵。
  • @user3689757 - 这样的注释最好嵌入到问题本身中,而不是仅仅显示为 cmets。

标签: python list dictionary matrix


【解决方案1】:
C= {0: [[[ 8.87155979, 2.50616085]],[[ 0.46289077, 8.05592104]]], 1: [[[-1.3115368 , 7.60922069]]]}

y = [[ 8.87155979,  2.50616085]]
print  any(y in x for x in C.values())# checks the subelements of the values in your dict
True

根据您的示例,这将适用于您的矩阵。

y=[[ 0.46289077,  8.05592104]]

C = {0: [matrix([[ 8.87155979,  2.50616085]]), matrix([[ 0.46289077,  8.05592104]])],
     1: [matrix([[-1.3115368 ,  7.60922069]])],
     2: [matrix([[ 0.46289077,  8.05592104]]), matrix([[-1.3115368 ,  7.60922069]]), matrix([[ 3.4826805 , -0.73544937]])]}



 print any((y == x[0]).all() for x in C.values())
 True

【讨论】:

  • 我很确定矩阵是 numpy.matrix。使用 OP 的 C,您的解决方案会为我抛出 ValueError: The truth value of an array with more than one element is ambiguous.
  • 如你所说,它是一个 numpy.matrix。上面的解决方案对我不起作用。
  • 第二个代码适用于我,使用完全相同的示例代码
  • @timgeb,好吧,我不是读心术,所以从我回答时 OP 提供的内容来看,其余的内容并不需要太多时间
  • 很抱歉,我收到了这个错误: at 0x7f928fd8c140> 我在那里缺少什么?
【解决方案2】:
[[ 8.87155979, 2.50616085]] in [m.tolist() for lst in C.values() for m in lst]
True

【讨论】:

    【解决方案3】:

    您可以使用两种不同的方式来实现它:使用和不使用列表解析。 with 是“python 方式”,但这取决于您的决定:

    from numpy import *
    
    C = {0: [matrix([[ 8.87155979,  2.50616085]]), matrix([[ 0.46289077,  8.05592104]])], 
         1: [matrix([[-1.3115368 ,  7.60922069]])], 
         2: [matrix([[ 0.46289077,  8.05592104]]), matrix([[-1.3115368 ,  7.60922069]]), matrix([[ 3.4826805 , -0.73544937]])]}
    
    y = [[ 8.87155979, 2.50616085]]
    
    # without list comprehension
    for x in C.values():
        for m in x:
            if all(m==y):
                print(True)
    
    # with list comprehension
    print(any([all(m==y) for x in C.values() for m in x]))
    

    【讨论】:

      【解决方案4】:

      这很好用:

      query = [[8.87155979, 2.50616085]]
      any(query[0] in x[0] for x in C.values())
      

      【讨论】:

        猜你喜欢
        • 2019-03-09
        • 2014-05-09
        • 1970-01-01
        • 2017-09-28
        • 1970-01-01
        • 1970-01-01
        • 2021-10-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多