Уведомления

Группа в Telegram: @pythonsu

#1 Май 30, 2013 18:02:54

denveren0k
Зарегистрирован: 2012-09-06
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск близких значений от заданного

Доброго времени суток уважаемые форумчане.
Очень нужна ваша помощь с алгоритмом поиска в словаре.

К примеру есть словарь

GB = {387:387000.00, 385:384638.48, 384:383209.20, 381:380876.15, 378:378479.63}
При вводе в форму значения например 384500 алгоритм должен найти два соседних значения в данном примере это 384638.48 и 384:383209.20. Известно что в словаре все числа идут от большего к меньшему по порядку. Пробовал через цикл for но так ничего путнего не смог сделать, может есть модуль для работы с поиском в данном случае?

Офлайн

#2 Май 30, 2013 18:19:24

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Поиск близких значений от заданного

Если встречаются слова “порядок” и “цикл for” то тебе не нужен словарь. Используй список.

Офлайн

#3 Май 30, 2013 18:52:35

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Поиск близких значений от заданного

denveren0k, а что должен выдать алгоритм в случае присутствия искомого значения в словаре?

Офлайн

#4 Май 30, 2013 19:18:19

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Поиск близких значений от заданного

Shaman
Известно что в словаре все числа идут от большего к меньшему по порядку
Откуда известно? Это не так.



Офлайн

#5 Май 30, 2013 19:20:10

denveren0k
Зарегистрирован: 2012-09-06
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск близких значений от заданного

После того как два близких значения будут найдены с их ключами и с самими значениями будут вестись расчеты согласно формулам.

bismigalis
Если встречаются слова “порядок” и “цикл for” то тебе не нужен словарь. Используй список.
С радостью бы использовал. если бы и ключи не были нужны , 384:383209.20 с ключем 384 и значением 383209.20 будут выполняться определенные манипуляции.
Пробовал через Json сделать что бы удобнее было искать но не осилил
Саму программу уже написал, форму и тому подобное, а вот с алгоритмом ппц.

Офлайн

#6 Май 30, 2013 19:22:18

denveren0k
Зарегистрирован: 2012-09-06
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск близких значений от заданного


doza_and
Почему не так, я привел вырезку из словаря, далее по порядку идет убывание.

Офлайн

#7 Май 30, 2013 19:27:12

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Поиск близких значений от заданного

список больщой вообще?

Офлайн

#8 Май 30, 2013 19:27:12

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Поиск близких значений от заданного

from operator import itemgetter
GB = {
    387: 387000.00,
    385: 384638.48,
    384: 383209.20,
    381: 380876.15,
    378: 378479.63
}
def find_approx(haystack, needle):
    mins, maxs = [], []
    for k, v in haystack.iteritems():
        (mins if v < needle else maxs).append((k, v))
    min_max = min(maxs, key=itemgetter(1))
    max_min = max(mins, key=itemgetter(1))
    return (max_min, min_max)
left, right = find_approx(GB, 384500)
print 'Neighbours: {} and {}'.format(left, right)

Офлайн

#9 Май 30, 2013 19:52:31

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Поиск близких значений от заданного

Если в неизменном и достаточно объёмном словаре поиск будет вестись несколько раз, имеет смысл создать его обёрнутую копию, в которой ключи и значения обменяются ролями. Далее в нём производить поиск половинным делением.

Офлайн

#10 Май 30, 2013 19:55:48

denveren0k
Зарегистрирован: 2012-09-06
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск близких значений от заданного

Всем спасибо за помощь код s0rg очень помог.

bismigalis
список больщой вообще?
Да довольно таки большой, больше 200-ста значений.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version