Как я могу получить доступ к элементам "строки" из словаря Python без использования массива NumPy - PullRequest
0 голосов
/ 26 июня 2018

У меня есть словарь, в котором каждый ключ соответствует списку с одинаковым количеством значений. Я рассматриваю каждый список как «столбец». Используя значения в каждом списке, я пытаюсь написать функцию линейного приближения. Это работает за исключением случаев, когда я сталкиваюсь с проблемой повторения значения в списке. Когда я использую indexof, он возвращает значение y, которое соответствует первому вхождению переданного значения x, а не фактическому значению y, имеющему тот же индекс в своем собственном списке, что и индекс значения x в соответствующем списке. Я изменяю свой словарь в пустую матрицу? Или есть способ сделать это с помощью словаря.

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, как я могу убедиться, что я получаю 21 в качестве значения y для 2, а не 24. Поскольку, если я использую indexof, он просто вернуть соответствующее значение в первом экземпляре 2, которое будет 24, а не 21.

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Массив Numpy был хорошей альтернативой, но я не мог найти хороший ответ, который не потребовал бы от меня реструктуризации всей моей программы. Я решил эту проблему, изменив переданные параметры функции calc_target, добавив в нее значения index1 и index2. Эти индексы представляют индексы x1 и x2 соответственно. Затем, когда я получаю 'y values', я просто использую эти значения индекса.

0 голосов
/ 26 июня 2018

Если вы перебираете списки, вы можете перебирать оба одновременно, как

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

Таким образом, вы уверены, что смотрите на один и тот же индекс в каждом списке. Вы не ищите их по значению напрямую, хотя. Это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...