在Python 3中对名称和分数列表进行排序

时间:2016-03-27 13:18:37

标签: python list sorting

我有一个名称结构的数据列表,然后得分如下:

['Danny', '8', 'John', '5', 'Sandra', 10]

我需要以最简单的方式做的是按最低到最高分数对数据进行排序,例如:

['John', '5', 'Danny', '8', 'Sandra', 10]

2 个答案:

答案 0 :(得分:2)

您应该创建配对,让您的生活更轻松:

l = ['Danny', '8', 'John', '5', 'Sandra', '10']


it = iter(l)


srt = sorted(zip(it, it), key=lambda x: int(x[1]))

哪个会给你:

[('John', '5'), ('Danny', '8'), ('Sandra', '10')]

it = iter(l)创建一个迭代器,然后zip(it, it)基本上每次迭代调用(next(it), next(it)),所以你创建格式为(user, score)的元组对,然后我们按照第二个元素排序每个元组都是得分,铸成int。

您也可以转换为int,然后对计划使用数据进行排序,您也可以从排序数据中创建一个平面列表,但我认为这不是一个好主意。

答案 1 :(得分:0)

您问题的最佳数据结构是Dictionary

在您的情境中,您需要在姓名和分数之间进行映射。

dict  = {'Danny':'8', 'John':'5', 'Sandra':'10'}

sorted_dict = ((k, dict[k]) for k in sorted(dict, key=dict.get, reverse=False))

for k, v in genexp:
...     k, v

('John', '5')
('Danny', '8')
('Sandra', 10)