我想相对于其他列表中的单词对列表中的单词进行排序。这里的清单包含三个单词字符串Tom Cruise Gerald,我必须根据基本列表中的单词,即Gerald Tom Cruise,重新排列此列表。
只需寻找一种实现此目标的最佳方法:
我的列表:
['Tom Cruise Gerald']
用于排序的基本列表:
['Gerald Tom Cruise']
我的列表的输出:
['Gerald Tom Cruise']
答案 0 :(得分:3)
l = ["the", "dog", "jumped"]
master = ["the", "quick", "brown", "fox", "jumped", "over", "thine", "lazy", "dog"]
这是我们的清单。为了对l
进行排序,我们通常使用l.sort()
。但看! list.sort
接受参数key
!这个函数接受每个值并输出一个数字,我们可以将其用作订购者。因此,让我们使用“ master
中的位置”:
l.sort(key=master.index)
print(l)
这给我们:
['the', 'jumped', 'dog']
成功!
答案 1 :(得分:2)
您可以将dict comprehension与enumerate
结合使用,以从参考列表中创建关键字到索引的映射,以便您可以轻松地给定列表的映射索引的索引成本为O(1),查找:
reference = ['Gerald', 'Tom', 'Cruise']
index = {k: i for i, k in enumerate(reference)}
print(sorted(['Tom', 'Cruise', 'Gerald'], key=index.get))
这将输出:
['Gerald', 'Tom', 'Cruise']
答案 2 :(得分:1)
您可以创建一个排序字典以进行快速查找,并将其用作key
:
data = 'Tom Cruise Gerald'.split()
sort = 'Gerald Tom Cruise'.split()
sort_dct = {d: s for d, s in zip(data, sort)}
print(sorted(data, key=sort_dct.get))
,或者如果您想返回到str
:
print(' '.join(sorted(data, key=sort_dct.get)))
请注意,['Tom Cruise Gerald']
是一个包含单个str
元素的列表。