我有一个列表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']]
我该怎么做才对?
答案 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)
这是将key
与b
结合使用的一种方法,该方法将使用列表理解功能对a
进行排序并使用它对[a[i] for i in sorted(range(len(b)), key=b.__getitem__)]
# [[1, 2, 3], [7, 8, 9], ['hi', 'foo', 'fi']]
进行排序:
Parent.vue