我有一個這樣的清單
data = [('£3.46', 'I001'), ('£10.46', 'I002')]
我想用這個串列排序
data.sort()
然而,排序串列將 10.46 英鎊放在 3.46 英鎊之前,我假設這是因為資料是一個字串,而 1 英鎊位于 3 英鎊之前。
我曾嘗試查看 lambda 函式,但我無法理解它。
uj5u.com熱心網友回復:
一種選擇是剝離"£"數字并將其轉換為浮點數作為排序鍵:
data.sort(key=lambda x: float(x[0].lstrip('£')))
print(data)
輸出:
[('£3.46', 'I001'), ('£10.46', 'I002')]
uj5u.com熱心網友回復:
您可以通過這種簡單的方式實作這一目標:
data = [('£10.46', 'I002'), ('£3.46', 'I001')]
def sort_tuple(item):
return float(item[0][1:])
print(sorted(data, key=sort_tuple))
輸出:
[('£3.46', 'I001'), ('£10.46', 'I002')]
Process finished with exit code 0
uj5u.com熱心網友回復:
這是一種具有一些局限性的通用方法,但應該適用于各種類似的情況。
import re
def float_then_text(values):
'''Convert [str, str, ...] to [(float, str), (float, str), ...]'''
return [(float(re.sub(r'[^\d.] ', '', text)), text) for
for text in values]
data = [('£3.46', 'I001'), ('£10.46', 'I002')]
data.sort(key=float_then_text)
該函式將轉換float_then_textfrom等。('£3.46', 'I001')[(3.46, '£3.46'), (1.0, 'I001')]
在鍵中包含文本是可選的,但可以確保具有不同單位的值每次也以相同的順序對其單位進行排序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/463638.html
標籤:Python python-3.x 列表
