我正在尝试按以下方式对列表进行排序。
data = [('18.3G', 'pgaur'), ('29.6G', 'adsoni'), ('5.51G', 'keyur'), ('10.8G', 'adityac')]
sorted(data, key= lambda x:x[0])
但它没有对数据进行排序。
答案 0 :(得分:2)
要以对人类有意义的方式对数字进行排序,您必须确保它们以数字而非文本形式呈现:
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()
并用于排序。最后,结果将保存在新列表中。
答案 1 :(得分:1)
sorted(data, key= lambda x:float(x[0][:][:-1]))
会给你你想要的东西。
这是按元组x [0]的第一个元素排序 [:]复制元组的其余部分,[: - 1]直到最后一位(不包括G)
答案 2 :(得分:1)
理想情况下,您需要一个返回数值的键函数。我们假设您可以使用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