使用第三个lis对列表进行排序

2024-04-25 16:51:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表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: unhashable type: 'list'

keydict = dict(zip(a,b))一致。你知道吗

我希望得到这个:

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

我能做些什么来纠正它?你知道吗


Tags: 方法key元素列表getfoo排序zip
2条回答

这里有一种方法使用sortedkey来获得将对b排序的索引,并使用它来使用列表理解对a排序:

[a[i] for i in sorted(range(len(b)), key=b.__getitem__)]
# [[1, 2, 3], [7, 8, 9], ['hi', 'foo', 'fi']]

使用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']]

相关问题 更多 >

    热门问题