基于另一个嵌套列表对嵌套列表进行排序

问题描述 投票:1回答:2

我有两个嵌套列表,x1和x2。我需要根据x1 [0] [0]的顺序求x2。

我曾尝试使用sort()和一些lambda x但不完全确定如何处理它。

x1 = [["d", 0.4, 1],
     ["c", 0.5, 2],
     ["b", 0.3, 3],
     ["a", 0.5, 4]]

x2 = [["c", 4, 1],
     ["d", 2, 2],
     ["a", 6, 3],
     ["b", 6, 4]]

我期望得到重新排序的x2的以下输出

x2 = [["d", 2, 2],
     ["c", 4, 1],
     ["b", 6, 4],
     ["a", 6, 3]]

我不能依赖于基于字母顺序的重新排序,因为我使用的数据集与此不同,我可能会遇到其他问题。理想情况下,我需要编写一些简单地匹配每个嵌套列表的内容,而x2中的顺序仅基于每个嵌套列表的第一个元素(总是一个字符串)。

我只需要使用pythons标准库就可以做到这一点。

python sorting string-matching nested-lists
2个回答
5
投票

您可以使用x1构建一个将enumerate中的键映射到其索引的dict,然后使用从映射键返回索引的键函数对x2进行排序:

order = {k: i for i, (k, *_) in enumerate(x1)}
x2.sort(key=lambda t: order[t[0]])

x2成为:

[['a', 3], ['b', 1], ['c', 4], ['d', 2]]

2
投票

尝试以下:

x1 = [["a", 1],
     ["b", 2],
     ["c", 3],
     ["d", 4]]

x2 = [["b", 1],
     ["d", 2],
     ["a", 3],
     ["c", 4]]

x2.sort(key=lambda k: dict(x1)[k[0]])

x2

这个输出

[['a', 3], ['c', 4], ['b', 1], ['d', 2]]
© www.soinside.com 2019 - 2024. All rights reserved.