我有一个值列表,现在说元组,例如
tmis = [
( 'script1', 'function1', 'lock1' ),
( 'script1', 'function2', 'lock1' ),
( 'script1', 'function3', 'lock1' ),
( 'script2', 'function4', 'lock1' ),
( 'script3', 'function5', 'lock2' ),
( 'script4', 'function6', 'lock3' ),
( 'script5', 'function7', 'lock3' ),
( 'script8', 'function10', 'lock1, lock2' )
]
我想用相同的“脚本”对我的数据进行分组,但使用不同的“锁”。
期望的输出:
[
[('script1', 'function1', 'lock1'),
('script1', 'function2', 'lock1'),
('script1', 'function3', 'lock1'),
('script3', 'function5', 'lock2'),
('script4', 'function6', 'lock3')],
[('script2', 'function4', 'lock1'),
('script5', 'function7', 'lock3')],
[('script8', 'function10', 'lock1, lock2')]
]
所以我对这个数据的输出是 3 个组,其中每个组只有 1 次出现特定的“锁定”,但是如果它们具有相同的“脚本”值,那么它们可以放在同一个组中,而不管相同的多次出现'锁'。最后一个数据项“script8”也有 2 个“锁”,因此应该在一个没有现有“lock1”或“lock2”的组中。
它不必是这种格式,我可以使用字典/集/元组/列表/其他任何东西。我找到了一种方法,但它并不漂亮,所以想知道是否有一种简单的方法来进行这种分组。
我试过(从另一个解决方案中找到)
groups = []
uniquekeys = []
data = sorted(tmis, key=lambda x: x[0] )
for k, g in itertools.groupby(data, lambda x: x[0]):
groups.append( list(g) )
uniquekeys.append(k)
但这仅按“脚本”值分组。有任何想法吗?
编辑:我想我的解释不是很清楚。我要做的是以这样的方式对元组进行分组,即没有两个具有相同“锁”的“脚本”在同一个组中(除非“脚本”相同)
如果有帮助,我可以发布我当前的(丑陋的)解决方案。