python - 如何根据另一个列表对元组列表进行排序

标签 python list sorting

有一个 list :

a = [("ax", 1), ("ec", 3), ("bk", 5)]

另一个列表:

b = ["ec", "ax", "bk"]

我要按照ba进行排序:

sort_it(a, b)

a = [("ec", 3), ("ax", 1), ("bk", 5)]

如何做到这一点?

最佳答案

a.sort(key=lambda x: b.index(x[0]))

这使用 a 中每个元组的第一个元素的 b 中的索引作为它排序的值对 a 进行就地排序开。

另一种可能更简洁的书写方式是:

a.sort(key=lambda (x,y): b.index(x))

如果您有大量项目,则以不同的方式处理可能会更有效,因为 .index() 可能是对长列表的昂贵操作,而您不会实际上需要进行完整排序,因为您已经知道顺序:

mapping = dict(a)
a[:] = [(x,mapping[x]) for x in b]

请注意,这仅适用于 2 元组列表。如果你想让它适用于任意长度的元组,你需要稍微修改一下:

mapping = dict((x[0], x[1:]) for x in a)
a[:] = [(x,) + mapping[x] for x in b]

关于python - 如何根据另一个列表对元组列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12814667/

相关文章:

Python——函数类

python - 如何理解将 IP 字符串转换为整数的函数式编程代码?

python - 将 glob.iglob() 结果分配给列表

python - 将整数字符串转换为列表并按奇数和偶数元素对其进行排序

python - 在 Python 中按字母数字顺序对字典(包含在列表中)进行排序

python - 根据值对字典键进行排序

c - 难以理解归并排序的特定 C 实现

javascript - 无需安装浏览器的 Python Scraping JavaScript 页面

java - map 按值排序

python - psycopg2.errors.InFailedSqlTransaction : current transaction is aborted, 命令被忽略,直到事务 block 结束