python已知有列表_Python根据另一个列表对一个列表进行排序

I have two lists, the first list is the key order, the second list is a tuple list.

colorOrder = ['red', 'blue', 'yellow', 'green']

tupleList = [(111,'red'),(222,'pink'),(333,'green')]

Please notice the two lists are not one-to-one relationship. Some colors are not in colorOrder, and some colors in colorOrder never appear in tupleList. So It is different from other similiar duplicate problems.

I need to Sort the tupleList according to the colorOrder.

I can solve this problem using two nested for loops, but need a more efficient solution.

#First sort according to the color order

for aColor in colorOrder:

for aTuple in tupleList:

if aTuple[1] == aColor:

ResultList.append(aTuple)

#Second add the tuples to the ResultList, whose color is not in the colorOrder

for aTuple in tupleList:

if aTuple[1] not in colorOrder:

ResultList.append(aTuple)

解决方案

First, I'd make colorOrder a mapping:

colorMap = {c: i for i, c in enumerate(colorOrder)}

Now sorting becomes a bit easier with colorMap.get

sorted(tupleList, key=lambda tup: colorMap.get(tup[1], -1))

This puts things not in the map first. If you'd rather add them last, just use a really big number:

sorted(tupleList, key=lambda tup: colorMap.get(tup[1], float('inf')))

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值