简体   繁体   English

按另一个字符串列表排序字符串列表 python

[英]sort string list by another string list python

So i have 2 lists.所以我有 2 个列表。

list1 is the list of which order im trying to recreate. list1 是我试图重新创建的订单的列表。

list2 is the unordered list. list2 是无序列表。

How to arrange list2 in same order as list1?如何以与 list1 相同的顺序排列 list2?

List1清单 1

list1 = [
            "loaded_sound,sfx/weapon/smg/type100/fire",
            "loaded_sound,sfx/weapon/smg/type100/foley",
            "loaded_sound,sfx/weapon/special/bouncing_betty",
            "loaded_sound,sfx/weapon/special/flame_thrower/foley",
            "loaded_sound,sfx/weapon/special/molotov",
            "loaded_sound,sfx/weapon/special/ptrs/fire",
            "loaded_sound,sfx/weapon/special/satchel_charge",
            "loaded_sound,sfx/weapon/tank/kingtiger/fire",
            "loaded_sound,sfx/weapon/tank/ringoffs",
            "loaded_sound,sfx/weapon/tank/sherman/fire",
            "loaded_sound,sfx/weapon/tank/tank_reload/foley",
            "loaded_sound,sfx/weapon/tank/tank_reload",
            "loaded_sound,sfx/weapon/tesla/bounce",
            "loaded_sound,sfx/weapon/tesla",
            "loaded_sound,sfx/weapon/uber",
            "loaded_sound,stream/music/mission/zombie",
            "loaded_sound,voiceovers/zombie/ann",
            "loaded_sound,voiceovers/zombie/monkey/explo_vox",
            "loaded_sound,voiceovers/zombie/monkey/groan",
            "loaded_sound,voiceovers/zombie/monkey",
            "loaded_sound,voiceovers/zombie/monkey/raise_vox",
            "loaded_sound,voiceovers/zombie/pa"
        ]

List2:清单 2:

list2 = [
            "loaded_sound,sfx/weapon/smg/type100/fire",
            "loaded_sound,voiceovers/zombie/pa",
            "loaded_sound,sfx/weapon/smg/type100/foley",
            "loaded_sound,voiceovers/zombie/monkey/raise_vox",
            "loaded_sound,sfx/weapon/special/bouncing_betty",
            "loaded_sound,sfx/weapon/special/flame_thrower/foley",
            "loaded_sound,voiceovers/zombie/monkey",
            "loaded_sound,voiceovers/zombie/monkey/groan",
            "loaded_sound,sfx/weapon/special/molotov",
            "loaded_sound,voiceovers/zombie/monkey/explo_vox",
            "loaded_sound,sfx/weapon/special/ptrs/fire",
            "loaded_sound,voiceovers/zombie/ann",
            "loaded_sound,sfx/weapon/special/satchel_charge",
            "loaded_sound,stream/music/mission/zombie",
            "loaded_sound,sfx/weapon/tank/kingtiger/fire",
            "loaded_sound,sfx/weapon/uber",
            "loaded_sound,sfx/weapon/tank/ringoffs",
            "loaded_sound,sfx/weapon/tesla",
            "loaded_sound,sfx/weapon/tank/sherman/fire",
            "loaded_sound,sfx/weapon/tesla/bounce",
            "loaded_sound,sfx/weapon/tank/tank_reload/foley",
            "loaded_sound,sfx/weapon/tank/tank_reload",
        ]

What ive tried:我试过什么:

_newList = []
# sort list2 in same order as list 1
for i in list1:
    _line_ = i
    for j in list2:
        if j == _line_:
            _newList.append(j)

But all this did was recreate list2 as it is.但这所做的只是照原样重新创建 list2。 it didnt rearrange anything.它没有重新安排任何东西。

You can use the index in list1 as the key when sorting list2 .排序list2时,您可以使用list1中的索引作为键。

If the lists are long, it would be good to create a dictionary that returns the indexes, rather than searching for each.如果列表很长,最好创建一个返回索引的字典,而不是搜索每个。

list1_dict = {val: i for i, val in enumerate(list1)}
list2.sort(key = lambda x: list1_dict.get(x, -1))

If there are any elements in list2 that aren't in list1 , this will sort them to the beginning.如果list2中有任何不在list1中的元素,这会将它们排序到开头。

I suggest you the following one-line style code:我建议您使用以下单行样式代码:

list2 = [i for i in list1 if i in list2]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM