我有一个嵌套列表如下:
nli=[[123,12],[124,15],[127,19],[12,6]]
我想根据另一个列表li
重新排列上面的嵌套列表:
li=[15,6,12,19]
其中li
值对应于嵌套列表的第二个元素nli
那么如何根据实习生对应的nli
的顺序重新排列li
每个嵌套列表nli
的第二个元素
重新排列nli
后的输出假设为:
[[124, 15], [12, 6], [123, 12], [127, 19]]
还想知道在哪里可以了解有关这类操作的更多信息 在此先感谢!!
答案 0 :(得分:2)
您可以先创建dict
,将元素的值映射到列表li
中的显示顺序。
>>> order = {k: i for i, k in enumerate(li)}
>>> order
{19: 3, 12: 2, 6: 1, 15: 0}
然后使用order
根据每个[1]
元素对原始列表进行排序。
>>> sorted(nli, key = lambda i: order[i[1]])
[[124, 15], [12, 6], [123, 12], [127, 19]]
答案 1 :(得分:1)
您可以使用nli
的每个值中最后一个元素的索引值进行排序:
nli=[[123,12],[124,15],[127,19],[12,6]]
li=[15,6,12,19]
new_list = sorted(nli, key=lambda x:li.index(x[-1]))
输出:
[[124, 15], [12, 6], [123, 12], [127, 19]]
答案 2 :(得分:1)
首先按需要键映射(创建索引):
by_second_item = {item[1]: item for item in nli}
现在使用映射创建新列表:
rearranged = [by_second_item[i] for i in li]
# or: list(map(by_second_item.get, li))
答案 3 :(得分:1)
[j for i in li for j in nli if j[1]==i]
#Output
#[[124, 15], [12, 6], [123, 12], [127, 19]]