[英]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.