我有一个嵌套列表,如下所示:
li = [['m', 'z', 'asdgwergerwhwre'],
['j', 'h', 'asdgasdgasdgasdgas'],
['u', 'a', 'asdgasdgasdgasd'],
['i', 'o', 'sdagasdgasdgdsag']]
我想按字母顺序对此列表进行排序,但是要使用每个子列表中的第一个或第二个元素。对于上面的示例,所需的输出将是:
['a', 'u', 'asdgasdgasdgasd']
['h', 'j', 'asdgasdgasdgasdgas']
['i', 'o', 'sdagasdgasdgdsag']
['m', 'z', 'asdgwergerwhwre']
实现这种目标的最佳方式是什么?
答案 0 :(得分:1)
您可以使用内置方法sorted()
来完成其中的一些操作。如果你想要改变它的打印方式,你就必须颠倒列表的顺序,但这并不难做到。
def rev(li):
for l in li:
l[0], l[1] = l[1], l[0]
return li
new_list = sorted(rev(li))
如果您想根据特定索引对列表进行排序,可以使用sorted(li, key=lambda li: li[index])
。
答案 1 :(得分:1)
作为第一步,我们执行一些转换(交换前两项 - 如果需要)和第二步简单排序:
>>> sorted(map(lambda x: sorted(x[:2]) + [x[2]], li))
[['a', 'u', 'asdgasdgasdgasd'],
['h', 'j', 'asdgasdgasdgasdgas'],
['i', 'o', 'sdagasdgasdgdsag'],
['m', 'z', 'asdgwergerwhwre']]
答案 2 :(得分:0)
import pprint
li = [['m', 'z', 'asdgwergerwhwre'],
['j', 'h', 'asdgasdgasdgasdgas'],
['u', 'a', 'asdgasdgasdgasd'],
['i', 'o', 'sdagasdgasdgdsag']]
for _list in li:
_list[:2]=sorted(_list[:2])
pprint.pprint(sorted(li))
>>>
[['a', 'u', 'asdgasdgasdgasd'],
['h', 'j', 'asdgasdgasdgasdgas'],
['i', 'o', 'sdagasdgasdgdsag'],
['m', 'z', 'asdgwergerwhwre']]