Сортировка списка по словарю (новичок) - PullRequest
3 голосов
/ 17 марта 2020

У меня есть следующий список:

listofanimals = ['Dog', 'Cat', 'Frog', 'Tiger', 'Sheep', 'Lion']

Я бы хотел отсортировать этот список по словарю:

score_card = {0: 'Sheep', 1: 'Dog', 2: 'Cat', 3: 'Tiger', 4: 'Frog', 5: 'Lion'}

Где должен быть порядок окончательного списка От 0 до 5, то есть

numberorder = [0, 1, 2, 3, 4, 5]

Я хотел бы создать это внутри функции. Вот что у меня есть:

def sorter():
    listofanimals = ['Dog', 'Cat', 'Frog', 'Tiger', 'Sheep', 'Lion']
    score_card = {0: 'Sheep', 1: 'Dog', 2: 'Cat', 3: 'Tiger', 4: 'Frog', 5: 'Lion'} 
    numbers = [0, 1, 2, 3, 4, 5]
    finallist = []
    for i in listofanimals:
        print(numbers[listofanimals.index(i)])
        q.append(numbers[listofanimals.index(i)])
    print(q)
    q = sorted(q)
    finallist = [score_card[j] for j in q]
    return finallist

Я не мог понять, как преобразовать listofanimals в числа, поэтому я мог отсортировать числа и затем вернуться в словарь, чтобы получить значения, но я просто не могу получить это на работу. Любая помощь приветствуется.

Ответы [ 4 ]

3 голосов
/ 17 марта 2020

Вы можете перевернуть словарь score_card, чтобы упростить задачу.

score_card = {0: 'Sheep', 1: 'Dog', 2: 'Cat', 3: 'Tiger', 4: 'Frog', 5: 'Lion'}
score_card={v:k for k,v in score_card.items()}
# {'Sheep':0, 'Dog':1,  'Cat':2, 'Tiger': 3, 'Frog':4, 'Lion':5} 

sorted(listofanimals,key=lambda x:score_card[x])
# ['Sheep', 'Dog', 'Cat', 'Tiger', 'Frog', 'Lion']

Если вы не хотите использовать lambda, вы можете использовать itemgetter

3 голосов
/ 17 марта 2020

инвертировать ваш словарь

data = {'Sheep':0, 'Dog':1,  'Cat':2, 'Tiger': 3, 'Frog':4, 'Lion':5} 

(если вам нужно, вы можете инвертировать его программно, см. Другие ответы)

теперь вы можете просто

my_sorted_list = sorted(my_list,key = data.get)
2 голосов
/ 17 марта 2020
listofanimals = ['Dog', 'Cat', 'Frog', 'Tiger', 'Sheep', 'Lion']
score_card = {0: 'Sheep', 1: 'Dog', 2: 'Cat', 3: 'Tiger', 4: 'Frog', 5: 'Lion'}
inverted_score_card = {v: k for k, v in score_card.items()}

sorted_list = sorted(listofanimals, key=inverted_score_card.__getitem__)
print(sorted_list)

вывод:

['Sheep', 'Dog', 'Cat', 'Tiger', 'Frog', 'Lion']
0 голосов
/ 17 марта 2020
sorted_dictionary = dict(sorted(score_card.items()))
sorted = []
for key, value in sorted_dictionary.items():
    for item in listofanimals:
        if value == item:
            sorted.insert(key, item)

Выход:

['Sheep', 'Dog', 'Cat', 'Tiger', 'Frog', 'Lion']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...