2016-05-30 2 views
-1

У меня есть структура, глядя, как этотсортировки списка кортежей в словаре

d= { 'image0' : [(image0, image1, 31.58), (image0, image2, 31.56), (image0, image3, 54.65)], 'image2' : [(image0, image2, 31.56), (image1, image2, 45.87), (image2, image3, 14.25)] ...} 

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

d= { 'image0' : [(image0, image2, 31.56), (image0, image1, 31.58), (image0, image3, 54.65)], 'image2' : [(image2, image3, 14.25), (image0, image2, 31.56),(image1, image2, 45.87)] ...} 

У меня есть список liste_im=[image0, image2], так что я написал это:

a={} 
for i in range(len(liste_im)): 
    a=sorted(d[str(liste_im[i])], key=lambda x: x[1][2]) 

, но он не работает: он дает мне этот результат:

[(image0, image2, 31.56), (image2, image1, 45.87), (image2, image3, 14.25)] 

, поэтому я попытался это:

a=d.items() 
for i in range(len(liste_im)):  
    a.sort(key=lambda x:x[1][i][2]) 

и это дает мне это:

[('image0',[(image0, image2, 31.56), (image0, image1, 31.58), (image0, image3, 54.65)]), ('image2',[(image2, image3, 14.25), (image0, image2, 31.56),(image1, image2, 45.87)])] 

просто список из моего словаря, но не отсортирован Тогда как есть a.sort (...)

Я надеюсь, что кто-то может мне помочь Спасибо

+1

Вы можете сделать это, позвонив '.sort()' в два раза. – giuscri

+0

* «не работает» * и * «все еще не работает» * не являются описаниями проблем, пожалуйста, дайте [mcve]. – jonrsharpe

+0

@giuscri Да, я знаю, но словарь d не всегда одно и то же, в начале есть только 2 'imageX', но может быть 10 или 20 разных ключей 'imageX'. –

ответ

0

Вам необходимо отсортировать значения, а затем клавиши (элементы):

from operator import itemgetter 
for v in d.values(): 
    v.sort(key=itemgetter(2)) 

a = sorted(d.items()) 
+0

спасибо, он работает! –

1

Я думаю, что ваша проблема связана с вашей лямбда-функцией, выглядит слишком много индексации, чем нужно.

Независимо от того, как d['imagex'] вернет список ваших кортежей, это означает, что вы можете позвонить .sort(..) на нем с key = lambda x: x[2]. Как показано ниже:

for itemKey in d: 
    d[itemKey].sort(key = lambda x: x[2]) 
+0

спасибо, он работает также :) В конце концов я выбрал ваше решение –

Смежные вопросы