[英]How to rearrange nested list based on particular index
我有一個嵌套列表,如下所示:
nli=[[123,12],[124,15],[127,19],[12,6]]
我想根據另一個列表li
重新排列上述嵌套列表:
li=[15,6,12,19]
其中li
值對應於嵌套列表nli
的第二個元素因此,我如何基於li
的順序重新排列nli
,而該intern對應於每個嵌套列表nli
的第二個元素,重新排列nli
后的輸出應該是:
[[124, 15], [12, 6], [123, 12], [127, 19]]
還想知道我在哪里可以了解有關此類操作的更多信息?
您可以首先創建一個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]]
您可以使用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]]
首先按想要的鍵映射(創建索引):
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))
[j for i in li for j in nli if j[1]==i]
#Output
#[[124, 15], [12, 6], [123, 12], [127, 19]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.