排序并设置为无重复部分

时间:2013-06-02 18:31:49

标签: python list key set

List = ["Wednesday_A_20", "Tuesday_C_22", "Thursday-A-30"]

我可以将其排序为

List.sort(key=lambda x: x.split("_", 1)[-1])

但是可以使用

  

组()   并获得所需的输出

"Wednesday_A_20", "Tuesday_C_22"

不应该是第1部分中的任何重复字母。 python新手更好的方法???提前致谢

2 个答案:

答案 0 :(得分:3)

如果我理解你,你可以做到

In [1]: mylist = ["Wednesday_A_20", "Tuesday_C_22", "Thursday_A_30"]

In [2]: key = lambda s: s.split('_')[1]

In [3]: from itertools import groupby

In [4]: [next(g) for k, g in groupby(sorted(mylist, key=key), key=key)]
Out[4]: ['Wednesday_A_20', 'Tuesday_C_22']

此处的

你可以使用dict。

答案 1 :(得分:0)

如果你只需要在最后排序一次的东西,你可能最好使用字典,其中键是A,C等,其中值是Wednesday_A_20等。然后在最后,得到dict.keys()并对它们进行排序。

如果你需要按照键的每一步按键排序的东西,你仍然使用与上面相同的键和值,但是使用treap(http://stromberg.dnsalias.org/~strombrg/treap/)或红黑树({{{{{{{ {3}})。两个(可以)像字典一样工作,除了它们的键总是保持有序,它们比字典慢一点(但不比在循环中排序字典键慢!)。 Treaps平均速度更快(适用​​于批处理应用程序),但红黑树的标准偏差较低(适用于交互式应用程序)。