我想按以下方式對列表進行排序。基於工程單元的元組排序列表
data = [('18.3G', 'pgaur'), ('29.6G', 'adsoni'), ('5.51G', 'keyur'), ('10.8G', 'adityac')]
sorted(data, key= lambda x:x[0])
但它不排序數據。
我想按以下方式對列表進行排序。基於工程單元的元組排序列表
data = [('18.3G', 'pgaur'), ('29.6G', 'adsoni'), ('5.51G', 'keyur'), ('10.8G', 'adityac')]
sorted(data, key= lambda x:x[0])
但它不排序數據。
要有意義給人類的方式進行排序號碼,你必須確保它們出現爲數字而不是文本:
example_list = ['5', '10']
如果排序會產生'['10','5'] ,因爲比較結果是'5'對'1'。一次一個角色。爲了得到你可能想要的結果,你必須做到以下幾點:
data = [('18.3G', 'pgaur'), ('29.6G', 'adsoni'), ('5.51G', 'keyur'), ('10.8G', 'adityac')]
sorted_list = sorted(data, key=lambda x: float(x[0][:-1]))
print(sorted_list)
# prints [('5.51G', 'keyur'), ('10.8G', 'adityac'), ('18.3G', 'pgaur'), ('29.6G', 'adsoni')]
通知上x[0]
切片。它會從x[0]
除最後一個('G'
)以外的所有字符,因爲這會擾亂數字的排序。然後切片x[0]
轉換爲浮動與float()
和用於排序。最後結果保存在一個新的列表中。
sorted(data, key= lambda x:float(x[0][:][:-1]))
會給你你想要的。
這是由元組x的第一個元素排序[0] [:]拷貝元組的剩餘部分,[:-1]到最後的數字(不包括G)
在理想情況下需要一個返回數值的關鍵函數。假設您可以使用k
,m
和g
作爲乘數。這段代碼不會像往常一樣將錯誤檢查留給讀者作爲練習。
def sortkey(pair):
num = pair[0][:-1]
mult = pair[0][-1].lower()
num = float(num)
mult = {'k': 1000, 'm': 1000000, 'g': 1000000000}[mult]
return num*mult
我認爲'G'代表重力加速度,而不是'Giga',但很有趣。 –
如果它不變,那麼@ ev。的解決方案可能會更快 – holdenweb
如何對數據進行排序?是按鍵還是按價值? – d3r1ck
它排序的數據,但字母數字,因爲他們是字符串,而不是數字。你也不會將結果列表保存在任何地方。 –
'sorted(data,key = lambda x:x [1])'將按字母順序按值排序數據。 – d3r1ck