回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个值列表,比如元组,比如</p>
<pre><code> 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' )
]
</code></pre>
<p>我想用相同的“脚本”但不同的“锁”对数据进行分组。你知道吗</p>
<p>期望输出:</p>
<pre><code>[
[('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')]
]
</code></pre>
<p>因此,我对这些数据的输出是3个组,其中每个组只有一个特定的“锁”,但如果它们有相同的“脚本”值,那么它们可以放在同一个组中,而不管同一个“锁”的多次出现。另外,最后一个数据项“script8”有2个“locks”,因此应该位于不具有现有“lock1”或“lock2”的组中。你知道吗</p>
<p>它不必是这种格式,我可以使用dictionary/set/tuples/list/任何其他格式。我找到了一个方法,但它并不漂亮,所以我想知道是否有一个简单的方法来做这个分组。你知道吗</p>
<p>我试过(从另一个解决方案中发现)</p>
<pre><code>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)
</code></pre>
<p>但这个组只按“script”值进行分组。有什么想法吗?你知道吗</p>
<p>编辑:我想我的解释不是很清楚。我要做的是对元组进行分组,使具有相同“锁”的两个“脚本”不在同一个组中(除非“脚本”相同)</p>
<p>我可以张贴我目前(丑陋)的解决方案,如果它有帮助。你知道吗</p>