我需要首先對整數(第二個元素)然后在字串/數字組合(第一個元素)上對嵌套的元組串列進行排序。我試圖在對第二個元素進行排序后使第一個元素按升序排列。一個很好的例子是第二個元素為 10 的元組。d522 應該是十組中的第一個元組。
預期輸出示例
#[[('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d1328', 11), ('d1268', 11), ('d114', 11), ('d522', 10),('d717', 10),('d792', 10)]
tupple=[[('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d1328', 11), ('d1268', 11), ('d114', 11), ('d792', 10), ('d717', 10),('d522', 10)],
[('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d1328', 11), ('d1268', 11)]]
for item in tupple:
sorted(item, key=lambda element: (element[1], (int("".join([i for i in element[0] if i.isdigit()])))),reverse=True)
# new = [[item[0] for item in inner] for inner in tupple]
tupple
###output [[('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d1328', 11), ('d1268', 11), ('d114', 11), ('d792', 10), ('d717', 10), ('d522', 10)], [('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d1328', 11), ('d1268', 11)]]
uj5u.com熱心網友回復:
您可以強制密鑰的第二部分反過來。在這種情況下,這相當容易:只需在創建的數字前面放一個減號,(輔助)比較就會被反轉。
(您也忘記將sorted()back 的結果分配給tupple[i],因為sorted()回傳一個副本;與 相比,它不會item原地改變item.sort()。但我發現tupple[i] = sorted(...)這里更清楚。
tupple=[[('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d1328', 11), ('d1268', 11), ('d114', 11), ('d792', 10), ('d717', 10),('d522', 10)],
[('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d1328', 11), ('d1268', 11)]]
for i, item in enumerate(tupple):
tupple[i] = sorted(item, key=lambda element: (element[1], -int("".join(i for i in element[0] if i.isdigit()))), reverse=True)
# Or alternatively
# item.sort(key=lambda element: (element[1], -int("".join(i for i in element[0] if i.isdigit()))), reverse=True)
tupple
這導致
[[('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d114', 11),
('d1268', 11), ('d1328', 11), ('d522', 10), ('d717', 10), ('d792', 10)],
[('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d1268', 11), ('d1328', 11)]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/474651.html
標籤:Python python-3.x 排序 嵌套的 元组
