排序字典中的元组列表

时间:2016-05-30 13:12:23

标签: python list sorting dictionary tuples

我的结构看起来像这样

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)] ...}

我希望它按键排序,然后按每个元组的最后一个元素排序。 基本上,我想要这样的想法:

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(...)

我希望有人可以帮助我 谢谢

2 个答案:

答案 0 :(得分:1)

我认为你的问题在于你的lambda函数,看起来比索引的索引要多得多。

无论如何,由于d['imagex']会返回您的元组列表,这意味着您可以使用.sort(..)在其上调用key = lambda x: x[2]。如下所示:

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

答案 1 :(得分:1)

您需要先对值进行排序,然后对键(项目)进行排序:

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

a = sorted(d.items())