Python 按第一个值对具有元组的列表进行排序

Python 按第一个值对具有元组的列表进行排序,python,list,sorting,tuples,Python,List,Sorting,Tuples,我有一个列表“distancechunks”,里面有90个列表。这90个列表中的每一个都包含2个元组(见图)。我想按第一个元组(图中突出显示的黄色)对每个列表(总共90个)进行排序。因此,每个列表都从低到高排列。数组值(第二个元组)不应排序,只应使用左侧的相同值进行维护 我尝试了一些经典的方法,如.sort()和使用lambda进行排序等: for x in distancechunks: for i in x: lst2 = sorted(i) prin

我有一个列表“distancechunks”,里面有90个列表。这90个列表中的每一个都包含2个元组(见图)。我想按第一个元组(图中突出显示的黄色)对每个列表(总共90个)进行排序。因此,每个列表都从低到高排列。数组值(第二个元组)不应排序,只应使用左侧的相同值进行维护

我尝试了一些经典的方法,如.sort()和使用lambda进行排序等:

for x in distancechunks:
    for i in x:
        lst2 = sorted(i)
        print(lst2)
但是,我总是收到不同的错误消息,如:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
或者我试过:

vallah = distancechunks

vallah.sort(key=lambda x: int(x[0]))
vallah
并获取错误消息:

int() argument must be a string, a bytes-like object or a number, not 'tuple'
不幸的是,我不知道如何实现这个错误

下面是“距离块”列表的一个例外:

[[(0.6164414002968976, array([6.2, 2.8, 4.8, 1.8])),
  (1.5132745950421556, array([5.7, 2.8, 4.1, 1.3])),
  (0.648074069840786, array([6. , 3. , 4.8, 1.8])),
  (0.8124038404635961, array([6.5, 2.8, 4.6, 1.5])),
  (0.6480740698407862, array([6.3, 2.9, 5.6, 1.8])),
  (4.497777228809803, array([4.8, 3. , 1.4, 0.1])),
  (0.5291502622129182, array([6.1, 3. , 4.9, 1.8])),
  (1.1445523142259595, array([6.2, 2.9, 4.3, 1.3])),
  (0.4242640687119287, array([6.7, 3. , 5.2, 2.3])),
  (1.4866068747318506, array([7.3, 2.9, 6.3, 1.8])),
  (0.6480740698407865, array([6.7, 3.3, 5.7, 2.1])),
  (2.135415650406262, array([5.7, 2.6, 3.5, 1. ])),
  (0.7416198487095664, array([6.3, 2.5, 5. , 1.9])),
  (0.6782329983125268, array([6.7, 3.1, 5.6, 2.4])),
  (0.9055385138137417, array([6.3, 2.5, 4.9, 1.5])),
  (4.135214625627066, array([5. , 3.4, 1.6, 0.4])),
  (4.050925820105819, array([4.8, 3.4, 1.9, 0.2])),
  (4.451965857910412, array([4.6, 3.1, 1.5, 0.2])),
  (1.6792855623746663, array([5.8, 2.7, 3.9, 1.2])),
  (1.4071247279470291, array([7.4, 2.8, 6.1, 1.9])),
  (0.6999999999999996, array([5.9, 3.2, 4.8, 1.8])),
  (0.7549834435270752, array([6.5, 3. , 5.8, 2.2])),
  (4.22965719651132, array([5.3, 3.7, 1.5, 0.2])),
  (4.3, array([5. , 3.4, 1.5, 0.2])),
  (4.3977266854592045, array([5. , 3.6, 1.4, 0.2])),
  (0.8366600265340757, array([6.8, 2.8, 4.8, 1.4])),
  (0.9055385138137422, array([6.8, 3.2, 5.9, 2.3])),
  (0.46904157598234314, array([6.4, 3.1, 5.5, 1.8])),
  (4.266145801540308, array([5.1, 3.4, 1.5, 0.2])),
  (1.8734993995195195, array([5.5, 2.3, 4. , 1.3]))],
 [(1.1575836902790229, array([7.2, 3.2, 6. , 1.8])),
  (2.692582403567252, array([5. , 2. , 3.5, 1. ])),
  (2.0976176963403037, array([7.7, 3.8, 6.7, 2.2])),
  (3.972404813208241, array([5.1, 3.3, 1.7, 0.5])),
  (0.4242640687119286, array([6.7, 3. , 5. , 1.7])),
  (4.262628297189423, array([5.1, 3.8, 1.5, 0.3])),

您的第二次尝试已接近尾声,只需对每个子列表进行排序即可


我不知道你为什么要在已经有浮点数的情况下尝试转换为int。

经典的东西应该可以工作:默认情况下,元组可以按第一个值排序(然后是第二个值,然后是第三个值等)。“我总是收到不同的错误消息”-什么错误消息?什么代码生成它们?
[按距离块中的lst排序(lst)]
应该可以正常工作。可能
数组
的内容是不可比较的(默认排序将在第一个值相等的情况下使用它们作为连接断路器);在本例中,请尝试
[sorted(lst,key=lambda t:t[0])在distancechunks中对lst进行排序]
Hi@tobias_k,您的第二个解决方案工作得很好!非常感谢你。
for chunk in distancechunks:
    chunk.sort(key=lambda x: x[0])