Сортировка вложенного списка на основе другого вложенного списка - PullRequest
1 голос
/ 27 апреля 2019

У меня есть два вложенных списка, x1 и x2. Мне нужно прибегнуть к x2 на основе порядка x1 [0] [0].

Я пытался использовать sort () и некоторые лямбда-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 отображался в x1, основываясь только на первом элементе каждого вложенного списка (который всегда является строкой).

Мне нужно сделать это, используя только стандартную библиотеку питонов.

Ответы [ 2 ]

5 голосов
/ 27 апреля 2019

Вы можете создать dict, который сопоставляет ключи в x1 с его индексом, используя enumerate, а затем сортирует 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 голосов
/ 27 апреля 2019

попробуйте следующее:

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]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...