【问题标题】:sort list of tuples in a dictionary对字典中的元组列表进行排序
【发布时间】:2016-09-28 08:05:51
【问题描述】:

我有一个像这样的结构

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

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

【问题讨论】:

  • 您可以通过拨打.sort() 两次来做到这一点。
  • "doesn't work""still not working" 不是问题描述,请给minimal reproducible example
  • @giuscri 是的,我知道,但字典 d 并不总是相同的东西,一开始只有 2 个 'imageX' 但可以有 10 或 20 个不同的键 'imageX'。

标签: python list sorting dictionary tuples


【解决方案1】:

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

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

a = sorted(d.items())

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢你,它也很有效 :) 最终我选择了你的解决方案
    猜你喜欢
    • 2018-10-19
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 2017-02-20
    • 2013-09-13
    相关资源
    最近更新 更多