基于工程单位排序元组列表

时间:2016-08-17 12:15:28

标签: python python-2.7

我正在尝试按以下方式对列表进行排序。

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

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

但它没有对数据进行排序。

3 个答案:

答案 0 :(得分:2)

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

  • 例如,'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()并用于排序。最后,结果将保存在新列表中。

答案 1 :(得分:1)

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

会给你你想要的东西。

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

答案 2 :(得分:1)

理想情况下,您需要一个返回数值的键函数。我们假设您可以使用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