2013-04-09 69 views
0

作为Python的初学者,我最近遇到了使用特定条件对嵌套列表进行排序的问题。我有这样一个嵌套列表:Python:按特定标准对嵌套列表进行排序

nestedList=[['R2D2','1path1','1path2'], 
      ['R3A1','2path1','2path2'], 
      ['R15L2','3path1','3path2']] 

我想这个列表按每个嵌套列表中的第一个字符串排序。其结果将是这样的:

nestedList=[['R15L2','3path1','3path2'], 
      ['R3A1','2paht1','2path2'], 
      ['R2D2','1path1','1path2']] 

目前我的解决方案是只使用具有反向参数排序功能:

nestedList.sort(reverse=True) 

我不知道这是否是安全的,因为我想它不会排序也由第二个字符串列表。

我怎样才能排序它只有第一个字符串? (例如'R15L2','R3A1'等)

非常感谢您的帮助!

+0

我的方法是不是真正的工作,但.. 。例如,将'1path1'更改为'5path1'将不会得到预期的结果... :( – AplusG 2013-04-09 09:57:28

+0

我不明白你想要的结果。''R3A1''大于''R2D2''但是它在你的排序清单之前? – halex 2013-04-09 09:59:02

+0

嗯......我认为环R15L2> R3A1> R2D2 ...也许这比我预期的更复杂... – AplusG 2013-04-09 10:06:33

回答

5

您想根据密钥(关键是列表的第一个元素)进行排序:

nestedList.sort(key=lambda x: x[0]) 

import operator as op 

nestedList.sort(key=op.itemgetter(0)) 
0
a = [['3f','2f','5a'],['5a','0r','7v'],['4r','58v','5l']] 
>>> a 
[['3f', '2f', '5a'], ['5a', '0r', '7v'], ['4r', '58v', '5l']] 
>>> a.sort() 
>>> a 
[['3f', '2f', '5a'], ['4r', '58v', '5l'], ['5a', '0r', '7v']] 
>>> a.sort(reverse=True) 
>>> a 
[['5a', '0r', '7v'], ['4r', '58v', '5l'], ['3f', '2f', '5a']] 
>>> 
+0

对不起。你不知道你想说什么......我已经有这个解决方案,但它似乎不完全正确... – AplusG 2013-04-09 13:33:31