我在 python 中有一个如下列表(真正的列表很大,我不能仅通过查看它来做到这一点):
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']]
我将其拆分为数据和名称以处理数据:
datos=original1[-(len(original1)-1):len(original1)]
考虑到电子邮件和电话,我需要做一个将所有重复项放在一起的字典,但我需要应用传递性:因为如果我们考虑电子邮件,第 0 行 = 第 2 行,如果我们考虑电话,第 1 行,第 1 行 = 行3 如果我们再次考虑电子邮件,我需要得到在这种情况下所有候选人都是 0、1、2 和 3,而 4 是单独的。
我创建了以下代码:
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].append(idx)
phone_to_indices[phone].append(idx)
所以现在我需要应用传递性规则,将 0 到 3 和单独的 4 组合在一起。
如果你打印
print 'email', email_to_indices
print 'phone', phone_to_indices
你得到:
电子邮件 defaultdict(, {'a@gmail.com': [0, 2],'b@gmail.com': [1, 3], 'c@gmail.com': [4]})
phone defaultdict(, {'1': [0, 1], '3': [3], '2': [2], '4': [4]})
不知道如何让那些考虑传递属性的人联合起来。我需要得到类似的东西:
first_group: [0, 1, 2, 3]
second_group: [4]
谢谢!