use*_*782 2 python sorting tuples list
我正在尝试使用自定义预定义列表作为所需顺序对元组的第一个元素上的元组列表进行排序。所以我有名单
my_list=(['chr1',12],['chrX',32],['chr2',1],['chr1',79],['chr2',6])
Run Code Online (Sandbox Code Playgroud)
并且第一个元素上的预定义列表是
custom_list=['chr1','chr2','chrX']
Run Code Online (Sandbox Code Playgroud)
我希望输出是
(['chr1',12],['chr1',79],['chr2',1],['chr2',6],['chrX',32])
Run Code Online (Sandbox Code Playgroud)
(目前,不需要对第二个元素进行排序。)我不知道如何做到这一点。有人可以帮忙吗?
您可以使用该list.index()函数将中的位置custom_list转换为排序键:
sorted(my_list, key=lambda x: (custom_list.index(x[0]), x[1]))
Run Code Online (Sandbox Code Playgroud)
custom_list但是,您可能希望将您的变成字典,以便更快地映射:
custom_list_indices = {v: i for i, v in enumerate(custom_list)}
sorted(my_list, key=lambda x: (custom_list_indices.get(x[0]), x[1]))
Run Code Online (Sandbox Code Playgroud)
字典查找需要恒定的时间,list.index()时间与列表的长度成正比。
另一个优点是,使用字典,您可以为字典中未找到的条目返回默认值(None在本例中);list.index()反而会引发ValueError异常。
演示:
>>> my_list=(['chr1',12],['chrX',32],['chr2',1],['chr1',79],['chr2',6])
>>> custom_list=['chr1','chr2','chrX']
>>> sorted(my_list, key=lambda x: (custom_list.index(x[0]), x[1]))
[['chr1', 12], ['chr1', 79], ['chr2', 1], ['chr2', 6], ['chrX', 32]]
>>> custom_list_indices = {v: i for i, v in enumerate(custom_list)}
>>> sorted(my_list, key=lambda x: (custom_list_indices.get(x[0]), x[1]))
[['chr1', 12], ['chr1', 79], ['chr2', 1], ['chr2', 6], ['chrX', 32]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
871 次 |
| 最近记录: |