簡體   English   中英

根據字典對列表進行排序(初學者)

[英]Sorting a list according to a dictionary (beginner)

我有以下清單:

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 轉換為數字,所以我可以對數字進行排序,然后反饋到字典中以獲取值,但我無法讓它工作。 任何幫助表示贊賞。

反轉你的字典

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

(如果需要,可以通過編程方式反轉它,請參閱其他答案)

現在你可以簡單地

my_sorted_list = sorted(my_list,key = data.get)
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']

您可以反轉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

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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM