回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我在python中有一个类似于下面的列表(真正的列表非常庞大,我不能仅通过查看来实现):</p>
<pre><code>original1=[['email', 'tel', 'fecha', 'descripcion', 'categ'],
['a@gmail.com', '1', '2014-08-06 00:00:06', 'MySpace a', 'animales'],
['b@gmail.com', '1', '2014-08-01 00:00:06', 'My Space a', 'ropa'],
['a@gmail.com', '2', '2014-08-06 00:00:06', 'My Space b', 'electronica'],
['b@gmail.com', '3', '2014-08-10 00:00:06', 'Myace c', 'animales'],
['c@gmail.com', '4', '2014-08-10 00:00:06', 'Myace c', 'animales']]
</code></pre>
<p>我把它分为数据和名称来处理数据:</p>
^{pr2}$
<p>考虑到email和tel,我需要做一个包含所有重复项的字典,但是我需要应用及物性:因为如果我们考虑电子邮件,第0行=第2行,如果我们考虑tel,第1行=第3行,如果我们再次考虑电子邮件,我需要得到在这种情况下所有候选对象都是0、1、2和3,而4是单独的。在</p>
<p>我创建了以下代码:</p>
<pre><code>from collections import defaultdict
email_to_indices = defaultdict(list)
phone_to_indices = defaultdict(list)
for idx, row in enumerate(datos):
email = row[0].lower()
phone = row[1]
email_to_indices[email].<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(idx)
phone_to_indices[phone].append(idx)
</code></pre>
<p>所以现在我需要应用传递性规则,把0到3集合起来,单独4。在</p>
<p>如果你打印</p>
<pre><code>print 'email', email_to_indices
print 'phone', phone_to_indices
</code></pre>
<p>你会得到:</p>
<blockquote>
<p>email defaultdict(, {'a@gmail.com': [0, 2],'b@gmail.com':
[1, 3], 'c@gmail.com': [4]})</p>
<p>phone defaultdict(, {'1': [0, 1], '3': [3], '2': [2],
'4': [4]})</p>
</blockquote>
<p>不知道如何得到考虑传递性的并集。
我需要一些类似的东西:</p>
<blockquote>
<p>first_group: [0, 1, 2 , 3]<br/>
second_group: [4]</p>
</blockquote>
<p>谢谢!在</p>