使用pythonzip函数将两个列表一起排序

2024-05-13 15:30:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题与将两个列表基本排序在一起有点不同

请参见以下代码示例:

list1=[3,4,2,1,6,1,4,9,3,5,8]
list2=['zombie','agatha','young','old','later','world',
       'corona','nation','domain','issue','happy']
srt=sorted(list(zip(list1,list2)),reverse=True)
print(srt)

结果是:

[(9, 'nation'), (8, 'happy'), (6, 'later'), (5, 'issue'), 
 (4, 'corona'), (4, 'agatha'), (3, 'zombie'), (3, 'domain'), 
 (2, 'young'), (1, 'world'), (1, 'old')]

问题:-正如我们所看到的,对于列表1中相同的值,列表2中的元素也按字母降序排列。如果我想按降序对列表1进行排序,然后按升序对列表2元素进行排序,列表1元素的值以某种简单的方式相同,该怎么办


Tags: 元素列表world排序domainissueoldzombie
2条回答

这并不漂亮,但您可以执行“double”sorted(),首先是list2值,然后是反向的list1值:

from operator import itemgetter

list1=[3,4,2,1,6,1,4,9,3,5,8]
list2=['zombie','agatha','young','old','later','world',
       'corona','nation','domain','issue','happy']


srt=sorted(sorted(zip(list1,list2), key=itemgetter(1)), key=itemgetter(0), reverse=True)
print(srt)

输出:

[(9, 'nation'), (8, 'happy'), (6, 'later'), (5, 'issue'), (4, 'agatha'), (4, 'corona'), (3, 'domain'), (3, 'zombie'), (2, 'young'), (1, 'old'), (1, 'world')]

使用键函数lambda k: (-k[0], k[1]))

list1 = [3, 4, 2, 1, 6, 1, 4, 9, 3, 5, 8]
list2 = ['zombie', 'agatha', 'young', 'old', 'later', 'world', 'corona', 'nation', 'domain', 'issue', 'happy']
srt = sorted(zip(list1, list2), key=lambda k: (-k[0], k[1]))
print(srt)

印刷品:

[(9, 'nation'), (8, 'happy'), (6, 'later'), (5, 'issue'), (4, 'agatha'), (4, 'corona'), (3, 'domain'), (3, 'zombie'), (2, 'young'), (1, 'old'), (1, 'world')]

相关问题 更多 >