我有一个数据库中的操作列表。这被复制到deque中,因为我想按顺序处理它,在我走的时候从左边弹出一些东西。在
所以我有类似actions=deque(actions)的东西,这很好。在
每个操作项都是psycopg模块中使用DictCursor的一个列表。每个列表都有“阶段”项。在
所以事情是分阶段的。有些操作在“a”阶段,有些在“b”阶段,等等。不是存储数据的最佳方式,但这就是我得到的结果。在
因此,为了让我的生活更轻松,我想分阶段将deque分成几个deque。在
所以如果actions[0]['phase']=='a',那么这将进入一个只包含阶段a的项目的列表中,以此类推,b等等
我可以用一堆“如果”和“附加”来完成这项工作,但这似乎是一项很大的努力。我想答案可能是filter(),但我不太确定如何使用它。在
随机注意事项:
澄清尝试:
我有个行为准则。比如:
actions = [
['phase': 'a', 'something_else': 'x'],
['phase': 'a', 'something_else': 'y'],
['phase': 'b', 'something_else': 'x']
]
想以(类似的)结尾:
^{pr2}$只需最少的代码,并且可以在任何数量的阶段/项目中工作/等等
首先定义一个键函数,它在给定一个动作时返回阶段,例如
现在先按} ,如下所示:
^{pr2}$key
排序,这样不会重新排列顺序,即每个阶段的顺序都是守恒的(它是“stable”),然后使用itertools
中的^{如你所见,我把单子倒过来了。这样你就可以高效地跳出列表的末尾,而不是在deque上使用popleft。如果你愿意的话,把它们变成deque而不是反转。现在这样使用:
我想你需要itertools模块中的groupby。在
http://docs.python.org/library/itertools.html#itertools.groupby
相关问题 更多 >
编程相关推荐