最近在写实验程序的时候,总是遇到需要将列表中的元素按照某一个属性进行排序后输出该元素,但是在排序之后index就乱了(其实将属性作为dict()的key或者类属性进行管理是很不错的选择,我觉得也是最合适的),于是提出以下两种比较合适的处理方法:
1、dict()进行管理并排序:
people = list();
people.append({'Name':'Lei Li','Age':15,'Height':180});
people.append({'Name':'Meimei Han','Age':14,'Height':165});
people.append({'Name':'Tom','Age':17,'Height':178});
people.append({'Name':'Lucy','Age':16,'Height':160});
print [x['Name'] for x in people];
people.sort(key=lambda x:x['Age'],reverse=True);
print [x['Name'] for x in people];
结果输出:
['Lei Li', 'Meimei Han', 'Tom', 'Lucy']
['Tom', 'Lucy', 'Lei Li', 'Meimei Han']
[Finished in 0.1s]
这应该是最合适也是最简单的,但是有的时候因为习惯不好,就出现了两个列表管理一个对象的两个属性(实验没设计好,或者信手拈来。。),下面的这种方法就当做救急用用。
2、组合属性并排序:
def combine(outputList,sortList):
CombineList = list();
for index in xrange(len(outputList)):
CombineList.append((outputList[index],sortList[index]));
return CombineList;
NameList = ['Lei Li', 'Meimei Han', 'Tom', 'Lucy'];
HeightList = [180, 165, 178, 160];
people = combine(NameList,HeightList);
print people;
people.sort(key=lambda x:x[1],reverse=True);
print people;
结果输出:
[('Lei Li', 180), ('Meimei Han', 165), ('Tom', 178), ('Lucy', 160)]
[('Lei Li', 180), ('Tom', 178), ('Meimei Han', 165), ('Lucy', 160)]
[Finished in 0.1s]
不过还是强烈建议好好管理属性和对象之间的关系,尽可能整合在一起,这些都是写程序初期容易犯的小毛病,临时的话可以直接调用一下。