python – 对包含列表的列表进行排序

我有一个算法生成一个包含未知数量的子列表的列表,每个子列表具有未知数量的字符串元素以及一个浮点数.我需要根据这个浮点数在主列表中排序这些子列表.此外,不重新排列子列表中的字符串的顺序.

我目前正在运行一段代码(下面链接),使用dict对其进行排序.你可以看到我正在获得KeyErrors.我之前没有使用过dicts,所以我不知道从哪里开始.如果有一个更好的方式,那么一个词也可以打开. http://ideone.com/wr8UA

花车不是顺序的,我不知道这是多大的交易,这是使用我有方法.意思是,偶尔会跳过数字(在Ideone的示例列表中,它们是1.0,2.0,4.0;跳过3.0以在运行时模拟这种情况).它们也不在子列表中的任何特定位置,因此所有for循环都在搜索它们.

希望这很清楚,我之前尝试过这样做并且得到了回报而不是关于什么让人困惑的问题.如果有什么不对劲,请告诉我.感谢大家!

编辑:按要求在正文中编码:

listed = [ ["1 NWZ","1 RWZ","2 NWZ","2 RWZ","1E HZ","1W HZ","1-2EHZ","2W HZ"],["1 NWZ","3E FZ","SNOK","POK",3.0,"2E AK",["1 BW","1AW AS","1BWAK","TESTK",1.0]] 

dictionary={}
for sub_list in listed:
    for value in sub_list:
        if isinstance(value,float):
            dictionary[str(value)]=sub_list
        else:
            pass
ordered_list=[]
    for i in range(1,len(listed)+1):
    if dictionary[str(i)]:
        ordered_list.append(dictionary[str(i)])

for sub_list in ordered_list:
    print sub_list

解决方法

sort method一个方便的键关键字参数,让您指定一个函数调用以确定列表应该排序的信息.

对列表进行排序就像编写一个返回每个子列表中包含的浮点值的函数一样简单:

def sortOnFloat(sublist):
    return [v for v in sublist if isinstance(v,float)]

请注意,我只返回所有浮点值的列表;比只返回一个容易得多.即使子列表中有0个浮点值,这也会起作用.

像这样排序你的列表:

listed.sort(key=sortOnFloat)

我克隆了你的例子并用上面的方法更新了它:http://ideone.com/u8ufK

产生的输出

['1 BW','1AW AS','3E FZ','1BWAK','POK','TESTK','1-2EHZ','2E AK',1.0]
['1 NWZ','1 RWZ','2 NWZ','2 RWZ','1E HZ','1W HZ','2W HZ']
['1 NWZ','SNOK','2W HZ']

请注意,.sort()方法就地对列表进行排序.您还可以使用sorted() function生成已排序的新列表;它采用相同的论点:

orderedlist = sorted(listed,key=sortOnFloat)

但请注意,就地排序总是更快.

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...