![](/img/trans.png)
[英]How to sort a dictionary in asc or desc with negative and positive keys?
[英]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.