order = ['w','x','a','z']
[(object,'a'),(object,'x'),(object,'z'),(object,'a'),(object,'w')]
Run Code Online (Sandbox Code Playgroud)
如何根据"order"提供的键列表按第二个元素对上面的元组列表进行排序?
2013年11月18日更新:
我找到了一个更好的方法来解决这个问题的变化,其中键肯定是唯一的,在这个问题中详细说明:Python:使用dict来加速元组列表的排序.
我的上述问题不太适用,因为元组的列表有两个元组,其键值为'a'.
Jul*_*not 11
您可以使用sorted,并作为key返回order列表中每个元组的第二个值的索引的函数.
>>> sorted(mylist,key=lambda x: order.index(x[1]))
[('object', 'w'), ('object', 'x'), ('object', 'a'), ('object', 'a'), ('object', 'z')]
Run Code Online (Sandbox Code Playgroud)
请注意,只要order列表中没有元组中的值,就会失败.
编辑:
为了更安全一点,您可以使用:
sorted(mylist,key=lambda x: x[1] in order and order.index(x[1]) or len(order)+1)
Run Code Online (Sandbox Code Playgroud)
这将使所有条目order在结果列表的末尾具有列表中缺少的键.
| 归档时间: |
|
| 查看次数: |
756 次 |
| 最近记录: |