我正在寻找一种方法来按照另一个字符串中的外观顺序对列表进行排序,以便遵循以下代码
thelist = ["a", "b", "c"]
thestring = "b c a"
将能够分类到
["b", "c", "a"]
因为这是每个列表对象出现在字符串中的顺序。
我将如何实现这一目标?是否可以使用带有某个参数的已排序函数来轻松实现此功能或其他功能? 感谢。
答案 0 :(得分:2)
将您的字符串转换为地图:
indices = {c: i for i, c in enumerate(thestring.split())}
然后使用该地图排序:
sorted(thelist, key=indices.get)
这允许thestring
中thelist
缺少的值,反之亦然。这也适用于重复thelist
中的元素。
演示:
>>> thestring = "b c a"
>>> indices = {c: i for i, c in enumerate(thestring.split())}
>>> sorted(['a', 'b', 'c'], key=indices.get)
['b', 'c', 'a']
>>> sorted(['a', 'b', 'c', 'a', 'c', 'b'], key=indices.get)
['b', 'b', 'c', 'c', 'a', 'a']
>>> sorted(['a', 'a', 'a'], key=indices.get)
['a', 'a', 'a']
>>> sorted(['a', 'e', 'b'], key=indices.get)
['e', 'b', 'a']