Сортировка диктовки по ключу и получение значения - PullRequest
0 голосов
/ 31 января 2019

Учитывая scores = { 0.0: "bob", 5.2: "alex", 2.8: "carl"}

Чтобы получить вывод [ "bob", "carl", "alex" ]

Я могу сделать print([ scores[key] for key in sorted(scores.keys()) ])

Это лучший (самый "питонический") способ?Я думал, что смогу использовать scores.items() в сочетании с sorted(key=...), чтобы избежать поиска в словаре, но не уверен, что это за параметр key.

Ответы [ 3 ]

0 голосов
/ 31 января 2019

Итерация по dict всегда будет использовать ключи, поэтому вам не нужно использовать метод .keys().

Также попробуйте , чтобы не использовать пробел после и доскобки.

scores = {0.0: "bob", 5.2: "alex", 2.8: "carl"}
print([scores[key] for key in sorted(scores)])

Для более функционального подхода вы также можете использовать:

scores = {0.0: "bob", 5.2: "alex", 2.8: "carl"}
print(list(map(scores.get, sorted(scores))))

Но ваше решение идеально подходит:)

0 голосов
/ 31 января 2019

Другим подходом было бы создание объекта-генератора, дающего значения dict, приведение их к списку, а затем его печать.

print(list(val for val in scores.values()))

0 голосов
/ 31 января 2019

, если вы настаиваете на использовании .items(), ключевой аргумент - key=lambda t: t[0], но в этом случае key=lambda t: t работает так же (но разрывает связи по значению).t используется в качестве ключа по умолчанию, поэтому вам не нужно указывать его:

scores = {0.0: "bob", 5.2: "alex", 2.8: "carl"}
print(sorted(scores.items()))

выводит:

[(0.0, 'bob'), (2.8, 'carl'), (5.2, 'alex')]

теперь, чтобы получить список значений, которые вы можете "распаковать"как это:

print(
    list(list(zip(*sorted(scores.items())))[1])
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...