我正在尝试根据每个嵌套列表的最后一个值对嵌套列表结构进行排序。我的列表如下所示:
li = [['a1', 1, 1.56], ['b3', '6', 9.28], ['c2', 1, 6.25]...]
我想要的输出是:
['b3', '6', 9.28]
['c2', 1, 6.25]
['a1', 1, 1.56]
我尝试了一些使用itemgetter
无效的解决方案:
rank_list = [i.sort(key=itemgetter(2)) for i in li]
我做错了什么?有没有更好的方法来排序嵌套列表?我得到一个AttributeError: 'str' object has no attribute 'sort'
。谢谢你的帮助。
答案 0 :(得分:4)
你接近你的一种方法,但你真正想要的是:
li.sort(key = itemgetter(2), reverse = True)
答案 1 :(得分:0)
rank_list = sorted(li, key=itemgetter(2))
答案 2 :(得分:0)
无法对字符串进行排序,这是AttributeError: 'str' object has no attribute 'sort'
想要告诉您的内容。
您想要对list
li
rank_list = sorted(li, key=itemgetter(2)) # to obtain a sorted copy of li
# or just sort in place:
li.sort(key=itemgetter(2))
无论你做什么,都不是你发布的内容:
>>> rank_list = [i.sort(key=itemgetter(2)) for i in li]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
答案 3 :(得分:0)
让我们澄清一下我们对这个问题的看法。
[i.sort(key = itemgetter(2))for i in li]
这意味着“获取每个子列表并对其元素(列表和两个字符串)进行排序,使用每个子项的第2项作为键;累积来自这些操作的返回值列表”。子列表的元素是整数和字符串; int根本不是序列(因此你无法从中获取一个项目),而且你的一些字符串太短(当我尝试你的例子时,我没有得到你引用的错误,而是“IndexError:字符串索引超出范围“,如预期的那样)。即使这确实有效,您也只会获得None
值列表,因为列表中的.sort
会对列表进行就地排序并返回None
。
你想要的是“给我这个按列表排序的每个元素的2个版本”。那是sorted(li, key=itemgetter(2))
。列表列表是您要排序的内容,因此您将传递给排序函数。您希望排序提供新值而不会影响到位,因此您可以使用自由函数sorted
。