order = ['w','x','a','z']
[(object,'a'),(object,'x'),(object,'z'),(object,'a'),(object,'w')]
如何根据“order”提供的键列表按第二个元素对上面的元组列表进行排序?
2013 年 11 月 18 日更新:
我发现了一个更好的方法来解决这个问题的变体,其中键肯定是唯一的,在这个问题中详细说明:Python:使用字典来加速元组列表的排序 https://stackoverflow.com/questions/20059427/python-using-a-dict-to-speed-sorting-of-a-list-of-tuples.
我上面的问题不太适用,因为给定的元组列表有两个元组,其键值为'a'
.
您可以使用sorted
,并给出key
一个函数,返回数组中每个元组的第二个值的索引order
list.
>>> sorted(mylist,key=lambda x: order.index(x[1]))
[('object', 'w'), ('object', 'x'), ('object', 'a'), ('object', 'a'), ('object', 'z')]
请注意,只要元组中的值不存在于order
list.
Edit:
为了更安全一点,您可以使用:
sorted(mylist,key=lambda x: x[1] in order and order.index(x[1]) or len(order)+1)
这会将所有带有缺少密钥的条目放入order
列表位于结果列表的末尾。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)