How to sort (list/tuple) of lists/tuples?
我在列表或元组列表中有一些数据,如下所示:
1 2 | data = [[1,2,3], [4,5,6], [7,8,9]] data = [(1,2,3), (4,5,6), (7,8,9)] |
我想按子集中的第二个元素排序。也就是说,按2,5,8排序,其中
1 | sorted_by_second = sorted(data, key=lambda tup: tup[1]) |
或: </P >
1 | data.sort(key=lambda tup: tup[1]) # sorts in place |
1 2 | from operator import itemgetter data.sort(key=itemgetter(1)) |
现在我想添加到斯蒂芬的答案,如果你想在阵列的品种从高到低的另一个方式,比其他的,以上只是to add this to the线: </P >
1 | reverse = True |
和作为结果将是: </P >
1 | data.sort(key=lambda tup: tup[1], reverse=True) |
在多准则排序村"的村庄,namely为第二和第三个元素的元组,让我们 </P >
1 | data = [(1,2,3),(1,2,1),(1,1,4)] |
所以我define Aλ,剧情是一describes元组级的。" </P >
1 2 | sorted(data, key=lambda tup: (tup[1],tup[2]) ) [(1, 1, 4), (1, 2, 1), (1, 2, 3)] |
斯蒂芬的答案是一个"使用。对完全性,这里的"DSU(decorate变undecorate)模式和战略的理解: </P >
1 2 3 | decorated = [(tup[1], tup) for tup in data] decorated.sort() undecorated = [tup for second, tup in decorated] |
或者,更简单: </P >
1 | [b for a,b in sorted((tup[1], tup) for tup in data)] |
在Python作为noted排序PCMCIA-HOWTO得到最新的资料,这已被终止,因为Python 2.4 unnecessary密钥函数时,became可用。 </P >
为了发展战略品种(A)元组
1 2 3 4 5 6 7 8 9 10 11 | data = [ ('betty', 1), ('bought', 1), ('a', 1), ('bit', 1), ('of', 1), ('butter', 2), ('but', 1), ('the', 1), ('was', 1), ('bitter', 1)] |
在使用这个方法: </P >
1 | sorted(data, key=lambda tup:(-tup[1], tup[0])) |
和信息技术,我的结果: </P >
1 2 3 4 5 6 7 8 9 10 | [('butter', 2), ('a', 1), ('betty', 1), ('bit', 1), ('bitter', 1), ('bought', 1), ('but', 1), ('of', 1), ('the', 1), ('was', 1)] |
没有λ: </P >
1 2 | def sec_elem(s): return s[1] |
1 | sorted(data, key=sec_elem) |
"斯蒂芬回答冰的点。这里是以最好的方法visualization; </P >
喊出来的,"一个准备好的球员的球迷!=) </P >
1 2 3 4 | >>> gunters = [('2044-04-05', 'parzival'), ('2044-04-07', 'aech'), ('2044-04-06', 'art3mis')] >>> gunters.sort(key=lambda tup: tup[0]) >>> print gunters [('2044-04-05', 'parzival'), ('2044-04-06', 'art3mis'), ('2044-04-07', 'aech')] |
这是一个功能
通过对关键的参数必须是什么这是可赎回的。在这里,使用安
下面的实例,我们是排序的列表的信息的元组,阿布特拥有某些事件的时间和人员的名字。 </P >
这是我们村庄的战略排序事件发生的时间-这是一张元素的元组。 </P >
(ipython会议) </P >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | >>> from operator import itemgetter >>> from numpy.random import randint >>> values = randint(0, 9, 30000).reshape((10000,3)) >>> tpls = [tuple(values[i,:]) for i in range(len(values))] >>> tpls[:5] # display sample from list [(1, 0, 0), (8, 5, 5), (5, 4, 0), (5, 7, 7), (4, 2, 1)] >>> sorted(tpls[:5], key=itemgetter(1)) # example sort [(1, 0, 0), (4, 2, 1), (5, 4, 0), (8, 5, 5), (5, 7, 7)] >>> %timeit sorted(tpls, key=itemgetter(1)) 100 loops, best of 3: 4.89 ms per loop >>> %timeit sorted(tpls, key=lambda tup: tup[1]) 100 loops, best of 3: 6.39 ms per loop >>> %timeit sorted(tpls, key=(itemgetter(1,0))) 100 loops, best of 3: 16.1 ms per loop >>> %timeit sorted(tpls, key=lambda tup: (tup[1], tup[0])) 100 loops, best of 3: 17.1 ms per loop |
排序(A)元组的冰quite简单: </P >
1 | tuple(sorted(t)) |