我構建了一個列表[[13, "b"], [10, "b"], [10, "a",], [4,"c"], [1, "d"]]
,它按兩個元素列表中的第一個值排序。這是我能做的部分。我不知道的是,如果兩個元素是相同的,那麼我想按字母順序排序。我用來排序第一個列表的方法是通過第一個元素反轉排序列表。這然而使[10, "b"]
之前[10, "a"]
但我想在「b」之前「a」。有沒有一種方法可以按降序排列第一個元素,如果按第二個元素按字母順序排序,則排序?按第一個元素對元素列表排序,但如果按第二個元素排序則等於
3
A
回答
8
這工作:
>>> li=[[13, "b"], [10, "b"], [10, "a",], [4,"c"], [1, "d"]]
>>> sorted(li,key=lambda sl: (-sl[0],sl[1]))
[[13, 'b'], [10, 'a'], [10, 'b'], [4, 'c'], [1, 'd']]
的sorted function產生一個新的列表。您還可以使用排序方法排序到位名單:
>>> li=[[13, "b"], [10, "b"], [10, "a",], [4,"c"], [1, "d"]]
>>> li.sort(key=lambda sl: (-sl[0],sl[1]))
>>> li
[[13, 'b'], [10, 'a'], [10, 'b'], [4, 'c'], [1, 'd']]
你也可以做一個嵌套的排序(排序或按一個鍵,然後第二個鍵),因爲Python使用一個stable sort:
>>> from operator import itemgetter
>>> li=[[13, "b"], [10, "b"], [10, "a",], [4,"c"], [1, "d"]]
>>> li.sort(key=itemgetter(1))
>>> li
[[10, 'a'], [13, 'b'], [10, 'b'], [4, 'c'], [1, 'd']]
>>> li.sort(key=itemgetter(0),reverse=True)
>>> li
[[13, 'b'], [10, 'a'], [10, 'b'], [4, 'c'], [1, 'd']]
由於在一種元素排序中不需要lambda,所以我使用了更快的operator.itemgetter而不是lambda。是否兩個更快的排序比一個快,我不知道...你也可以使用lambda來實現這個方法。
有很大的sort tutorial,它顯示了很多這些成語。
+1
+1更快打字:)這裏是我的'排序(l,鍵= lambda x:(-x [0],x [1]))' –
相關問題
- 1. 按元素列表的第二個元素對列表進行排序
- 2. 按方案中對的第二個元素對排序列表
- 3. 按第三個元素排序Python列表,然後按第一個元素排序?
- 4. 按第一個元素排序向量,然後按C中第二個元素排序C
- 5. 按C++中的第一個元素對中的第二個元素對一個對的向量排序?
- 6. 需要幫助按二元素排序二維數組,然後按第一個元素排序(Java)
- 7. 按多個元素排序
- 8. 按行中的第一個元素對csv進行排序
- 9. Python:按每個子列表的第一個元素排序列表列表
- 10. 如何按降序和第二個元素對對的向量進行排序?
- 11. 按第二個節點元素對單獨鏈接列表排序。 Java
- 12. Scheme:按元素排序元素
- 13. Python:如何按最常見的第一個元素對列表進行排序?
- 14. 如果第二個元素相同,則將列表中的第一個元素合併爲一個元組?
- 15. XSLT按兩個元素排序;如果第一個重複,則使用第二個
- 16. 排序第二個元素的嵌套字符串列表(python)
- 17. Linq:按日期排序並查找第一個元素
- 18. 如何按字母順序排列列表中的第一個元素?
- 19. 按python列表元素排序項目
- 20. Python:按元素排序列表字典
- 21. 元素按屬性排序
- 22. xslt按子元素排序
- 23. DataFrame元素按行排序
- 24. 如何從排序列表中獲取第一個元素?
- 25. 選擇第一個元素,但排除在其他元素內部的元素
- 26. 如何按v2.3中的第n個元素對列表進行排序?
- 27. 按Python中最後一個元素對列表排序3
- 28. 按遞增順序對元素排序兩個列表
- 29. 按相似元素的元素排序列表
- 30. 基於第一個數組元素對文件進行排序
[Python 3 List:如何根據數字和字母對\ [('NJ',81),('CA',81),('DC',52)\]進行排序?] (http://stackoverflow.com/questions/17711598/python-3-list-how-do-i-sort-nj-81-ca-81-dc-52-base-on-number) –