如何在不使用numpy数组的情况下从python字典访问“行”的元素

时间:2018-06-26 18:09:53

标签: python dictionary matrix

我有一本字典,其中每个键对应一个具有相同数量值的列表。我将每个列表都视为“列”。使用每个列表中的值,我试图编写一个线性近似函数。除非我遇到列表中重复值的问题,否则它会起作用。当我使用indexof时,它返回一个y值,该值与传入的x值的首次出现相对应,而不是与该值在其自己的列表中的索引相同的实际y值,而不是在其各自的列表中的x值。我可以将字典更改为Numpy矩阵吗?还是可以使用字典来做到这一点。

def calc_target(x1, x2, type1, type2, X):
    """Uses linear approximation to return a calculated
       value for the passed in type using a target value.

    Keyword arguments:
    x1 -- first x value
    x2 -- second x value
    type1 -- type of value to be calculated
    type2 -- type of value passed in
    X -- target value
    """
    y2 = float(data[type1][data[type2].index(str(x2))])
    y1 = float(data[type1][data[type2].index(str(x1))])
    print 'X:'
    print x1
    print x2
    print 'Y:'
    print y1
    print y2
    slope = (y2 - y1)/(x2 - x1)
    print slope
    return slope * (X - x1) + y1

enter image description here 例如,如果我的x值为3,并且列表中的第二个2与键2对应,那么我如何确保我得到2的y值而不是24的y值。因为如果我使用indexof,它将在2的第一个实例处返回对应的值,它将是24而不是21。

2 个答案:

答案 0 :(得分:2)

如果要遍历列表,可以像这样同时遍历两个列表

for value1, value2 in zip(dictionary_name[key1],dictionary_name[key2]):
    do something

这样,您可以确保在每个列表中查找相同的索引。您并不是直接按值查找它们。有帮助吗?

答案 1 :(得分:0)

Numpy数组是一个很好的选择,但是我找不到一个很好的答案,不需要我重组整个程序。我通过将calc_target函数的传入参数更改为包括index1和index2值来解决了此问题。这些索引分别表示x1和x2的索引。然后,当我得到“ y值”时,我就使用这些索引值。