我希望采取三个最新的(基于时间)名单从下面的印刷代码。这些不是实际的文件,而是经过解析并存储在字典中的文本:
list4 = sorted(data1.values(), key = itemgetter(4))
for complete in list4:
if complete[1] == 'Completed':
print complete
退货:
['aaa664847', ' Completed', ' location' , ' mode', ' 2014-xx-ddT20:00:00.000']
['aaa665487', ' Completed', ' location' , ' mode', ' 2014-xx-ddT19:00:00.000']
['aaa661965', ' Completed', ' location' , ' mode', ' 2014-xx-ddT18:00:00.000']
['aaa669696', ' Completed', ' location' , ' mode', ' 2014-xx-ddT17:00:00.000']
['aaa665376', ' Completed', ' location' , ' mode', ' 2014-xx-ddT16:00:00.000']
我尝试将这些结果附加到另一个列表中,得到以下结果:
[['aaa664847', ' Completed', ' location' , ' mode', ' 2014-xx-ddT20:00:00.000']]
[['aaa665487', ' Completed', ' location' , ' mode', ' 2014-xx-ddT19:00:00.000']]
我想要一个列表,然后我可以使用[-3:]打印出最近的三个。你知道吗
storage = [['aaa664847', ' Completed', ' location' , ' mode', ' 2014-xx-ddT20:00:00.000'],['aaa665487', ' Completed', ' location' , ' mode', ' 2014-xx-ddT19:00:00.000']]
所以
也许。。。?你知道吗
补充:一个解释可能会有所帮助。
(c for c in list4 if c[1]=='Completed')
部分是一个生成器表达式(“genexp”),它从一开始走list4
,一次只产生满足条件的项(这里的子列表)。你知道吗它周围的
()
是需要的,因为itertools.islice
需要另一个参数(genexp必须总是被圆括号包围,尽管当它是可调用函数的唯一的参数时,调用可调用函数的圆括号就足够了,不需要再加上括号)。你知道吗islice
被告知(通过它的第二个参数)只产生它作为第一个参数接收的iterable的前3项。一旦完成,它就停止循环,不再做进一步的工作(这将是无用的)。你知道吗我们确实需要调用
list
,因为我们需要一个列表,而不是迭代器(这就是islice
的结果)。你知道吗对生成器和迭代器感到不舒服的人可能会选择以下不太优雅、性能可能较差但更简单的方法:
这也是非常有效的Python(如果不是更早的话,它早在python1.5.4就可以正常工作了)。但是现代的Python用法更倾向于生成器、迭代器和
itertools
,如果适用的话。。。你知道吗相关问题 更多 >
编程相关推荐