将列表与第三个列表排序

时间:2019-05-02 08:50:00

标签: python list

我有一个列表a,其中包含各包含三个元素的行(也为列表)。我想根据列表b中的值以升序对它们进行排序。我尝试了以下方法:

a = [[1,2,3],['hi','foo','fi'],[7,8,9]]
print(a)
b = [0.3,3,0.6]

keydict = dict(zip(a,b))
a.sort(key=keydict.get)

但是我收到错误消息:

  

TypeError:不可散列的类型:“列表”

keydict = dict(zip(a,b))所在的行中。

我希望得到这个:

a = [[1,2,3],[7,8,9],['hi','foo','fi']]

我该怎么做才对?

2 个答案:

答案 0 :(得分:3)

sorted和自定义键的理解是解决方案:

>>> [x for _, x in sorted(enumerate(a), key=lambda x: b[x[0]])]
[[1, 2, 3], [7, 8, 9], ['hi', 'foo', 'fi']]

或使用zip

>>> [x for _, x in sorted(zip(b, a))]
[[1, 2, 3], [7, 8, 9], ['hi', 'foo', 'fi']]

答案 1 :(得分:1)

这是将keyb结合使用的一种方法,该方法将使用列表理解功能对a进行排序并使用它对[a[i] for i in sorted(range(len(b)), key=b.__getitem__)] # [[1, 2, 3], [7, 8, 9], ['hi', 'foo', 'fi']] 进行排序:

Parent.vue