根据一个列表

时间:2015-10-23 14:48:40

标签: python sorting csv

所以,我有五个清单。

placeName
placeType
population
latitude
longitude

现在,我想根据人口排序。这些列表都带有标题标题(它是从.csv文件导入的)所以我使用

删除它们
del list[0]

这是我的问题。如果我这样运行:

sortedPop = sorted(population, key=float, reverse=True);

我得到一个正确排序的人口清单:

['8173941', '1085810', '589900', '552267', '535907', '518090', '510746', '474632', '468720', '443760', '349561', '335145', '325949', '289301', '284321', '270726', '268064', '265178', '255394', '253651', '238137', '234982', '229700', '218791', '218705', '215173', '211228', '194189', '189120', '187503', '186682', '182441', '179485', '175547', '174700', '174286', '171750', '165456', '162949', '161707', '159994', '155298', '154718', '152841', '147663', '145818', '144957', '144170', '142968', '142723', '136362', '134022', '131982', '128060', '123187', '120256', '120046', '119441', '117963', '116447', '113507', '110507', '109805', '109691', '109185', '109120', '109015', '107926', '107627', '107355', '107123', '106943', '105878', '105367', '104157', '103886', '103608', '102885', '100160', '100153', '99251', '97886', '96555', '95580', '94932', '94782', '92363', '91930', '91703', '91297', '91053', '89663', '88855', '88483', '88243', '88134', '87590', '86552', '86011', '83641']

如果我这样做:

popPlace = zip(population, placeName);
popPlace.sort(reverse=True);

我没有:

[('99251', 'Wakefield'), ('97886', 'Preston'), ('96555', 'Oldham'), ('95580', 'Rayleigh'), ('94932', 'Hemel Hempstead'), ('94782', 'Bath'), ('92363', 'Darlington'), ('91930', 'West Bromwich'), ('91703', 'Southport'), ('91297', 'Barnsley'), ('91053', 'Hastings'), ('89663', 'Stevenage'), ('88855', 'Hartlepool'), ('88483', 'Chesterfield'), ('88243', 'Grimsby'), ('88134', 'Halifax'), ('87590', 'Bedford'), ('86552', 'Nuneaton'), ('86011', 'Chester'), ('83641', 'Weston-Super-Mare'), ('8173941', 'London'), ('589900', 'Glasgow'),

基本上,它不能对具有不同数量级的数字进行排序,除非给出key = float。但是,我不能在zip上使用key = float,因为它给我一个错误:TypeError:float()参数必须是字符串或数字。

那么,我该如何正确排序?

此外,是否可以将所有五个列表捆绑到一个zip中并正确排序?我认为这只是zip(placeName,placeType,population,latitude,longitude)等。

3 个答案:

答案 0 :(得分:1)

首先,您应该为所有这些使用pandas,因为它将为您的数据提供一个漂亮的表结构,而不是必须跟踪单独的列表(请参阅http://pandas.pydata.org/)。

对于这种特殊情况,在第二个示例中使用key=float失败,因为您不是迭代可以直接转换为数字的字符串,而是迭代(种群,名称)元组。您可以在排序中使用类似key=lambda x: int(x[0])的内容,但在执行任何这些操作之前,您可以通过添加一行population = map(int, population)来将总体转换为整数。

答案 1 :(得分:0)

您需要一个排序元组:

list_tuples =[('99251', 'Wakefield'), ('97886', 'Preston')]
print sorted(list_tuples, key=lambda popu: int(popu[0]))
>>> [('97886', 'Preston'), ('99251', 'Wakefield')]

答案 2 :(得分:0)

您可以使用以下符号将填充列表转换为整数:

population = [int(x) for x in population]

然后排序将起作用