Python сортировка нескольких кортежей - PullRequest
0 голосов
/ 05 июня 2018

Я использую Python для сопоставления изображений.Векторы объектов для эталонных изображений хранятся в базе данных MySQL.Для каждого нового изображения я генерирую вектор признаков, нахожу разницу между тестовым изображением и опорными векторами в mysql db и возвращаю совпадения на основе расстояния.Это работает хорошо.Однако я хочу отсортировать результаты по расстоянию и получить только первые 10 результатов, которые имеют наибольшее расстояние.Пока мой код выглядит следующим образом:

for i,a in enumerate(data):
    features=[float(x) for x in a[6:]]
    d = chi2_distance(features, queryFeatures)
    results=a[1],d
    #res=sorted(results, key=itemgetter(1))
    #results.sort(key=lambda x:x[1])
    #results=sorted(results,key=lambda x: x[1])
    #results=sorted(results, key=lambda x: x[1], reverse=True)
    print(type(results))

Когда я печатаю тип результатов, я получаю следующее:

<type 'tuple'>
<type 'tuple'>
<type 'tuple'>

Когда я печатаю только результаты, я получаю:

(127209905L, 6.459347693123215)
(127281515L, 7.790508647801378)
(127312977L, 6.374409391826666)

Я пробовал различные методы, включая преобразование кортежей в список и затем сортировку по списку, но ни один из них не работал.Я относительно новая пчела, работающая над питоном ... любое руководство о том, как это сделать, было бы очень полезно.

Ожидаемый результат -

(127281515L, 7.790508647801378)
(127209905L, 6.459347693123215)
(127312977L, 6.374409391826666)

1 Ответ

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

Прежде всего, вместо

results=a[1],d

используйте

results.append((a[1], d))

для сбора всех данных.А затем

results = sorted(results, key=lambda x: x[1], reverse=True)

для сортировки результатов по расстоянию.

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