我想知道是否有更多的Pythonic方法可以分组,并按照另一个列表的顺序排序列表。
lstNeedOrder
以随机顺序排列成对。我希望输出按lst
中的顺序排序。结果应该包含a
的所有对,然后是所有b
和c
的。
lstNeedOrder
只有a/c
或c/a
中的格式。
输入:
lstNeedOrder = ['a/b','c/b','f/d','a/e','c/d','a/c']
lst = ['a','b','c']
输出:
res = ['a/b','a/c','a/e','c/b','c/d','f/d']
更新
lst = ['a','b','c']
不是实际数据。它只是让逻辑易于理解。实际数据是更复杂的字符串对
答案 0 :(得分:0)
将sorted
与客户key
功能一起使用:
>>> lstNeedOrder = ['a/b','c/d','f/d','a/e','c/d','a/c']
>>> lst = ['a','b','c']
>>> order = {ch: i for i, ch in enumerate(lst)} # {'a': 0, 'b': 1, 'c': 2}
>>> def sort_key(x):
... # 'a/b' -> (0, 1), 'c/d' -> (2, 3), ...
... a, b = x.split('/')
... return order.get(a, len(lst)), order.get(b, len(lst))
...
>>> sorted(lstNeedOrder, key=sort_key)
['a/b', 'a/c', 'a/e', 'c/d', 'c/d', 'f/d']