擅长:python、mysql、java
<p>一种方法就是记录你见过某个父母多少次。第一次看到父级“a”时,将该部分/父级对添加到第一组;第二组添加到第二组,以此类推</p>
<p>例如:</p>
<pre><code>def split_into_groups(transactions):
counts = {}
out_groups = {}
for partial, parent in transactions:
counts[parent] = target = counts.get(parent, 0) + 1
out_groups.setdefault(target, {})[partial] = parent
return out_groups
</code></pre>
<p>给了我</p>
<pre><code>In [9]: split_into_groups(zip(partials, parents))
Out[9]:
{1: {1: 'a', 2: 'b', 3: 'c', 4: 'd', 7: 'f'},
2: {5: 'a', 6: 'd', 8: 'c'},
3: {9: 'c', 10: 'a'}}
</code></pre>
<p>如果计数还没有出现,则使用<code>counts.get</code>获取默认值0;如果还没有看到目标计数,则使用<code>out_groups.setdefault</code>生成默认的空字典并将其放入out组。你知道吗</p>
<p>如果必须处理重复的partials,可以将setdefault行替换为</p>
<pre><code>out_groups.setdefault(target, []).append((partial, parent))
</code></pre>
<p>将组成员转换为元组列表而不是字典:</p>
<pre><code>{1: [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (7, 'f')],
2: [(5, 'a'), (6, 'd'), (8, 'c')],
3: [(9, 'c'), (10, 'a')]}
</code></pre>