сортировать список по словам в другом списке - PullRequest
0 голосов
/ 15 октября 2018

Я хочу отсортировать слова в списке по словам в другом списке.Здесь мой список содержит строку из трех слов Тома Круза Джеральда, и я должен перестроить этот список в соответствии со словом в Базовом списке, т.е. Джеральдом Томом Крузом.

Просто ищу питонический и лучший способ добиться этого:

Мой список:

['Tom Cruise Gerald']

Базовый список для сортировки:

['Gerald Tom Cruise']

Вывод для моего списка:

['Gerald Tom Cruise']

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Вы можете создать сортировочный словарь для быстрого поиска и использовать его как key:

data = 'Tom Cruise Gerald'.split()
sort = 'Gerald Tom Cruise'.split()
sort_dct = {d: s for d, s in zip(data, sort)}

print(sorted(data, key=sort_dct.get))

или, если хотите, вернуть обратно к str:

print(' '.join(sorted(data, key=sort_dct.get)))

обратите внимание, что ['Tom Cruise Gerald'] - это список, содержащий один элемент str.

0 голосов
/ 15 октября 2018

С помощью enumerate вы можете использовать dict понимание, чтобы создать сопоставление ключевых слов с индексом из списка ссылок, чтобы можно было легко отсортировать данный список с сопоставленным индексом, который стоит в среднем O (1) для поиска:

reference = ['Gerald', 'Tom', 'Cruise']
index = {k: i for i, k in enumerate(reference)}
print(sorted(['Tom', 'Cruise', 'Gerald'], key=index.get))

Это выводит:

['Gerald', 'Tom', 'Cruise']
0 голосов
/ 15 октября 2018
l = ["the", "dog", "jumped"]
master = ["the", "quick", "brown", "fox", "jumped", "over", "thine", "lazy", "dog"]

Вот наши списки.Чтобы отсортировать l, мы обычно используем l.sort().Но смотри!list.sort принимает аргумент key!Это функция, которая принимает каждое значение и выводит число, которое мы можем использовать как заказчик.Итак, давайте используем «позицию в master»:

l.sort(key=master.index)
print(l)

Это дает нам:

['the', 'jumped', 'dog']

Успех!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...