python-关于一个二维列表,按照给定一个顺序列表来进行排序(个人总结,不喜勿喷)

假设给一个列表,[u'赵', u'钱', u'孙', u'李', u'周', u'吴']

数据列表,[[u'钱', 1], [u'吴', 2], [u'周', 3], [u'赵', 4], [u'孙', 5]]

我们获取的数据需要按照这个列表的顺序进行排序,按照之前python介绍的sorted中的key无法使用给定的顺序列表来排序,所以写了一个方法。

如果有更好的写法,欢迎分享!

# -*- coding: utf-8 -*-
list_name = [u'赵', u'钱', u'孙', u'李', u'周', u'吴']
print list_name
sort_name = [[u'钱', 1], [u'吴', 2], [u'周', 3], [u'赵', 4], [u'孙', 5]]

# 1.先取列表中的需要作为排序参数的列
list_sort = []
for i in sort_name:
    list_sort.append(i[0])

# 2.判断设置的元素对比列表是否包含数据中的所有元素,不包括就加到对比列表后面
list_diff = list(set(list_sort) - set(list_name))
if list_diff:
    list_name.extend(list_diff)

# 3.再对于这个列按照我们想要的顺序进行排序
# 之所以要排序一个作为排序参数的列表,因为后面排序,是替换列表的内容,如果需要排序列表的参数列的个数少于比对的列表,就会报错
list_sort = sorted(list_sort, key=list_name.index)

# 4.构造一个列表,与需要排序的列表相同
list_sort_end = [i for i in sort_name]

# 5.从需要排序的列表获取元素,然后获取这个元素在排序参数列表中的位置,修改构造列表中的元素位置
for i in sort_name:
    name_index = list_sort.index(i[0])
    list_sort_end[name_index] = i
print list_sort_end

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值