python group by和其他列表排序列表

时间:2015-07-30 02:52:40

标签: python list

我想知道是否有更多的Pythonic方法可以分组,并按照另一个列表的顺序排序列表。

lstNeedOrder以随机顺序排列成对。我希望输出按lst中的顺序排序。结果应该包含a的所有对,然后是所有bc的。

lstNeedOrder只有a/cc/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']不是实际数据。它只是让逻辑易于理解。实际数据是更复杂的字符串对

1 个答案:

答案 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']