我有一个名称结构的数据列表,然后得分如下:
['Danny', '8', 'John', '5', 'Sandra', 10]
我需要以最简单的方式做的是按最低到最高分数对数据进行排序,例如:
['John', '5', 'Danny', '8', 'Sandra', 10]
答案 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)