簡體   English   中英

按值對字典列表進行排序

[英]Sort a list of dictionaries by value

我有以下形式的詞典列表:

neighbour_list = [{1:4}, {3:5}, {4:9}, {5:2}]

我需要按照字典中具有最大價值的順序對列表進行排序。 因此,對於上面的代碼,排序后的列表如下所示:

sorted_list = [{4:9}, {3:5}, {1:4}, {5:2}]

列表中的每個詞典只有一個映射。

有一種有效的方法可以做到這一點嗎? 目前,我正在遍歷列表以獲取最大的值,然后記得在哪里發現它返回了最大的值,但是我不確定如何擴展此范圍以能夠對整個列表進行排序。

實現我自己的dict類會更容易嗎?

編輯:這是我的代碼,用於返回理想排序列表中應排在第一位的字典。

temp = 0
element = 0

for d in list_of_similarities:
    for k in d:
        if (d[k] > temp):
            temp = d[k]
            element = k
            dictionary = d

first = dictionary[element]

您可以使用匿名函數作為排序鍵來提取dict值(雖然不確定我是否以最有效的方式完成了此操作:

sorted(neighbour_list, key = lambda x: tuple(x.values()), reverse=True)
[{4: 9}, {3: 5}, {1: 4}, {5: 2}]

請注意,我們需要將x.values()強制x.values()為元組,因為在Python 3中, x.values()的類型為“ dict_values”,無法排序。 我想這個主意是,字典比列表更像一個集合(因此花括號),並且集合上沒有(井井有條)排序。 您不能使用通常的字典順序,因為沒有“第一個元素”,“第二個元素”等概念。

您可以使用dict值作為鍵進行list.sort

neighbour_list.sort(key=lambda x: x.values(), reverse=1)

考慮到只有一個值,對於python2,您可以在itervalues上調用next來獲取第一個也是唯一的值:

neighbour_list.sort(key=lambda x: next(x.itervalues()), reverse=1)
print(neighbour_list)

對於python3,您不能在dict.values上調用next,它必須是:

neighbour_list.sort(key=lambda x: next(iter(x.values())), reverse=1)

並且必須在dict.values上調用list

neighbour_list.sort(key=lambda x: list(x.values()), reverse=1)

暫無
暫無

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

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