Как отсортировать список по ключу словаря? Python - PullRequest
0 голосов
/ 04 мая 2020

У меня есть словарь

score={"basketball":[45,63],"baseball":[8,17],"football":[34,55],"soccer":[7,1]}

и список

sports=["football","basketball","baseball","soccer"]

Это способ отсортировать мой список, чтобы он соответствовал моему словарю, например,

["basketball","baseball","football","soccer"]

Ответы [ 4 ]

1 голос
/ 04 мая 2020

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

>>> sorted(sports, key=lambda sport: list(score).index(sport))
['basketball', 'baseball', 'football', 'soccer']

Словари упорядочены с Python 3,7 (см. Также { ссылка }).

0 голосов
/ 05 мая 2020

Если ваш список имеет те же значения, что и ключ словаря, зачем вам сортировать список? Просто возьмите ключи словаря, аналогично тому, что предлагает Рено:

sports = list(score)

Если вы используете версию Python, которая еще не гарантирует порядок словарных статей, то, конечно, все дело в спорный вопрос.

1005 * Если вы хотите некоторое поведение для тех случаев, когда список спортивных и ключи оценки не являются одинаковым (посаженным мудро), то вы должны определить, что поведение.
0 голосов
/ 04 мая 2020
sort(score.keys())
sort(sports)

Попробуйте это и напечатайте оба

0 голосов
/ 04 мая 2020

Словари не упорядочены, поэтому нет порядка, который соответствовал бы порядку словаря (в нем его нет). Вы можете заметить это в том факте, что два словаря, указанные с одними и теми же ключами / значениями в разном порядке, считаются эквивалентными:

Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 22:39:24) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> {'foo': True, 'bar': False} == {'bar': False, 'foo': True}
True

В вашем примере самым простым решением было бы просто инициализировать список в указанном порядке вы хотите, чтобы это было, так как все эти значения в любом случае жестко запрограммированы. В более сложном примере решением может быть либо использование OrderedDict, либо использование dict в сочетании со списком, поддерживающим порядок.

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