给定python中的两个列表,一个包含字符串,另一个包含对象,如何映射它们?

Auf*_*ind 4 python sorting list

我有一个字符串列表

string_list = ["key_val_1", "key_val_2", "key_val_3", "key_val_4", ...]
Run Code Online (Sandbox Code Playgroud)

和一个包含对象的列表

object_list = [object_1, object_2, object_3,...]
Run Code Online (Sandbox Code Playgroud)

每个对象object_i都有一个属性key.

我想按顺序对对象object_liststring_list进行排序.

我可以做点什么

new_list = []
for key in string_list:    
    for object in object_list:
        if object.key == key:
            new_list.append(object)
Run Code Online (Sandbox Code Playgroud)

但必须有更多的pythonic方式,然后这个蛮力的方式.:-)你会如何解决这个问题?

Sve*_*ach 8

首先,创建一个将对象键映射到对象的字典:

d = dict((x.key, x) for x in object_list)
Run Code Online (Sandbox Code Playgroud)

接下来使用列表推导创建排序列表:

new_list = [d[key] for key in string_list]
Run Code Online (Sandbox Code Playgroud)

  • +1但不要忘记包含逻辑,即`string_list`可能包含一个字符串,其中`key`不在你的字典中. (2认同)