簡體   English   中英

如何按值(DESC)然后按鍵(ASC)對字典進行排序?

[英]How to sort a dictionary by value (DESC) then by key (ASC)?

在發現驚人的sorted() ,我再次陷入困境。

問題是我有一個string(key) : integer(value)形式string(key) : integer(value) ,我需要按其整數值的降序排序它, 如果兩個元素在哪里有相同的值,那么按鍵的升序。

一個讓它更清晰的例子:

d = {'banana':3, 'orange':5, 'apple':5}
out: [('apple', 5), ('orange', 5), ('banana', 3)]

做了一些研究之后我得到了類似的東西:

sorted(d.items(), key=operator.itemgetter(1,0), reverse=True)
out: [('orange', 5), ('apple', 5), ('banana', 3)]

這是因為它對值和鍵進行了反向排序。 我需要鑰匙不要反轉。

就像是

In [1]: d = {'banana': 3, 'orange': 5, 'apple': 5}

In [2]: sorted(d.items(), key=lambda x: (-x[1], x[0]))
Out[2]: [('apple', 5), ('orange', 5), ('banana', 3)]
  • 字典無法直接排序,因此您需要對items() ,包含鍵/值對的元組列表進行排序。

  • 由於您希望按值字段排序,然后是鍵字段,因此必須使用獲取指定字段的operator.itemgetter從元組中提取這些字段以用作排序鍵。

  • 最后,要對一個字段進行降序排序並對另一個字段進行降序,請執行兩次傳遞,首先按二級鍵升序排序,然后按主鍵降序排序另一次。 這一步依賴於Python的排序穩定性

例如:

import operator
In [1]: d = {'banana': 3, 'orange': 5, 'apple': 5}

In [2]: fruit = sorted(d.items(), key=operator.itemgetter(0))
In [3]: sorted(fruit, key=operator.itemgetter(1), reverse=True)
Out[3]: [('apple', 5), ('orange', 5), ('banana', 3)]

有關更多詳細信息,請參閱Python Sorting-HOWTO指南

暫無
暫無

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

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