我有一本包含类似人员名单的字典。因此,根据上述声明,我希望David和charles作为一个类似人员列表返回,基于共同兴趣(在这种情况下是数据挖掘)和Ramesh和Suresh作为第二个类似人员列表(遗传学常见于都)。如何做到这一点(没有功能的结果很好)?
dataset={
'David':['Artificial Intelligence','Machine learning', 'Neural networks', 'data mining'],
'Charles':['embedded computing','data mining','digital filters','signal processing','virtual reality','augmented reality'],
'Ramesh':['molecular biology','genetics','neuro surgery','oncology','ophthalmology'],
'Suresh':['genetics','neurology','ENT','bioinformatics','gene processing','radiology','pharmacology']
}
def commoninterest(personi,personj):
similar_persons=[]
for interest in dataset[personi]:
if interest in dataset[personj]:
similar_persons.append(personi,personj)
return similar_persons
答案 0 :(得分:0)
问题尚未准确定义。这个例子表明,一个共同的属性足以使两个人相似。在这种情况下,您应该创建尽可能多的人员列表。 (也许,你可以删除空列表。)
我想制定一个更复杂的措施,你应该根据共同兴趣的数量来定义人与人之间的指标。在这种情况下,我建议使用集合而不是列表,因为
答案 1 :(得分:0)
就像Imre Piller所说,你想在列表中存储兴趣。这是一种可能的溶剂。此外,该功能会告诉您这些配对的共同兴趣,但如果您愿意,可以摆脱它。
dataset={
'David':set(['Artificial Intelligence','Machine learning', 'Neural networks', 'data mining']),
'Charles':set(['embedded computing','data mining','digital filters','signal processing','virtual reality','augmented reality']),
'Ramesh':set(['molecular biology','genetics','neuro surgery','oncology','ophthalmology']),
'Suresh':set(['genetics','neurology','ENT','bioinformatics','gene processing','radiology','pharmacology'])
}
def get_common_intrests(people):
pairs = []
p_list = list(people)
for i, p1 in enumerate(p_list):
for p2 in p_list[:i]:
common_interests = people[p1].intersection(people[p2])
if len(common_interests) > 0:
pairs.append([p1, p2, common_interests])
return pairs
print get_common_intrests(dataset)
结果(python 2):
[['Suresh', 'Ramesh', set(['genetics'])], ['David', 'Charles', set(['data mining'])]]