题目:有一个相似属性列表,每一行有一些属性,属性间"\t"分割。若某两行有一个属性相同,则认为他们都相似,要求将其合并。比如相似属性表:
生日 出生日期 出生日
身高 身长
出生年月日 出生时间 出生日期
我们要做的是合并为 “生日 出生日期 出生日期 出生年月日 出生时间”
code如下:
#!/usr/bin/env python
#!-*- coding:utf-8 -*-
#!vim: set ts=8 sw=8 sts=8 tw=100 noet:
# ***************************************************************************
#
#
# $Id$
#
# **************************************************************************/
import os
import sys
node_father={}
output_dict={}
def find_father(item):
while node_father.has_key(item):
item=node_father[item]
return item
for line in sys.stdin:
lin=line.strip().split('\t')
if len(lin)!=2:
continue
item1=lin[0]
item2=lin[1]
f_item1=find_father(item1)
f_item2=find_father(item2)
if f_item1==f_item2:
continue
else:
node_father[f_item1]=f_item2
if not output_dict.has_key(f_item2):
output_dict[f_item2]=[]
if f_item1 not in output_dict[f_item2]:
output_dict[f_item2].append(f_item1)
if output_dict.has_key(f_item1):
for item in output_dict[f_item1]:
if item not in output_dict[f_item2]:
output_dict[f_item2].append(item)
output_dict[f_item1]=[]
for item in output_dict:
output=item
if output_dict[item]:
for key in output_dict[item]:
output+="\t"+key
print output