回答
謝謝,這個問題是排序。假設我們有(a,10),(b,5),(c,11)。 (c,11),(a,10),(b,5)
好吧,我假設你有這些元組列表中的元組。您可以使用內置的sorted
函數,併爲其指定一個按鍵函數,該函數指定您的列表元素的排序屬性。
>>> people = [('bob', 28), ('alice', 21), ('jeff', 78)]
>>> sorted(people, key=lambda tup: tup[1], reverse=True)
[('jeff', 78), ('bob', 28), ('alice', 21)]
這裏lambda tup: tup[1]
將返回每個元組的第二元件。這是元組將被排序的值。 reverse=True
設置爲按降序對元組進行排序。
使用operator.itemgetter或operator.attrgetter而不是lambda。 (attrgetter,如果它是一個namedtuple)。它更習慣,也更快。 –
@AlexanderHuszagh爲什麼我需要導入這樣一項微不足道的任務? – timgeb
因爲這是內建庫的點。當然,你可以寫一個lambda,但是itemgetter是特定的,它很有用,而且速度也快了50%。 –
如果你把名字/在喜歡的東西(字典青睞將取決於你的實際文件格式(具有相同的年齡不需要保留訂單在TXT人名) - 以下假定一個名稱,然後年齡在每一行上,用空格分隔):
names = {}
with open('file.txt') as f:
for line in f:
name, age = line.split()
names[name] = int(age)
那麼很容易進行排序 - 由名字(你建議沒有什麼排序,只是FYI),用途:
sorted(names)
要按年齡排序,改變用來做排序的關鍵是:
sorted(names, key=lambda i: names[i])
所以,要打印,您可以使用:
for name in sorted(names, key=lambda i: names[i]):
print(name, names[name])
timegeb給出的the answer的替代方案是使用來自operator
包(documentation)的itemgetter
。
from operator import itemgetter
people = [('bob', 28), ('alice', 21), ('jeff', 78)]
print(sorted(people, key=itemgetter(1), reverse=True))
,這將給你完全相同的結果
[('jeff', 78), ('bob', 28), ('alice', 21)]
itemgetter
作爲替換爲lambda
表達。
- 1. 基於屬性排序json對象
- 2. 基於子對象的屬性對對象排序
- 3. 基於對象屬性對數組進行排序 - Javascript
- 4. 基於屬性對對象數組排序
- 5. 基於屬性值對對象數組排序(int)
- 6. 無法基於雙重屬性對對象進行排序
- 7. 基於任意長度的屬性排序JavaScript對象數組
- 8. 基於屬性的複雜排序對象列表
- 9. 基於對象屬性
- 10. 排序基於所述對象的屬性強類型對象的數組
- 11. 基於多個屬性根據優先級排序javascript對象
- 12. 科特林 - 排序MutableList基於對象屬性
- 13. 排序基於對象場
- 14. 排序基於對象
- 15. 合併對象基於對象屬性
- 16. XSLT:排序基於多的XML屬性
- 17. 排序的NSArray基於多個屬性
- 18. Python的排序基於2類屬性
- 19. 對對象的屬性排序NSMutableArray
- 20. Linq基於對象屬性的不同
- 21. 如何基於對象的屬性值
- 22. 基於屬性的單獨對象組
- 23. 通過子對象屬性值排序對象屬性
- 24. 基於多個屬性排序節點?
- 25. 排序基於在對象的變量
- 26. 排序基於php數組的對象
- 27. 基於對象的ArrayList排序值
- 28. 僅在處理中基於一個屬性對對象數組進行排序
- 29. 基於某些屬性對類對象進行分組和排序?
- 30. 基於另一個列表中的對象屬性的排序列表
你可以給我們一個你的文件的例子,你到目前爲止嘗試了什麼? –
問題是通過所述元組的第二個元素讀取文件中的元素還是排序元組列表? – timgeb
如果你提供了一些嘗試,你會得到一個很好的答案 –