基于工程uni的元组排序表

2024-10-03 23:17:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着把清单按以下方式分类

data = [('18.3G', 'pgaur'), ('29.6G', 'adsoni'), ('5.51G', 'keyur'), ('10.8G', 'adityac')]

sorted(data, key= lambda x:x[0])

但它不是对数据进行排序


Tags: 数据lambdakeydata排序方式分类sorted
3条回答
sorted(data, key= lambda x:float(x[0][:][:-1]))

会给你想要的

这是按元组x[0]的第一个元素排序 [:]复制元组的其余部分,[:-1]直到最后一位(不包括G)

理想情况下,您需要一个返回数值的键函数。假设可以使用kmg作为乘法器。此代码不执行错误检查,这通常是留给读者的练习

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

要以对人类有意义的方式对数字进行排序,必须确保它们以数字而不是文本的形式呈现:

  • e、 例如,“5”是一个表示数字的字符串,而不是一个数字 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()的float并用于排序。最后,结果保存在一个新列表中

相关问题 更多 >