给定名为hobbies.txt的文件。
此文件包含一组Facebook用户及其爱好。
文件中的每一行都包含用户/用户名和爱好列表 那个用户每行中的数据以逗号分隔。
例如,在行中
2254,reading,coding,swimming,playing soccer,
用户/用户名是:2254
兴趣爱好是:阅读,编码,游泳和踢足球
爱好的数量和类型可能因用户而异。
此文件将是您的代码必须阅读才能使用的数据集 实现执行以下操作的代码:
寻找朋友的圈子/网络:
在您要报告的每个圈子中,所有用户应至少共享x 爱好数量
x是用户可以输入到程序的变量。
应将朋友圈写入名为circles.txt的文件。
每一行都应该包含您找到的圈子/网络中的用户名, 标签字符和共享爱好列表。
例如,一行可能如下所示:
2254,552,1258 reading,swimming,hiking
寻找热门用户:
受欢迎程度是基于至少y圈/网络的一部分。
y可以是用户可以输入到程序的变量。
应将热门用户写入名为popular.txt的文件。每 用户以及用户所属的圈数/网络数量应该在 单独的行并由制表符分隔。
例如:
2254 5
此步骤应在步骤(a。)之后进行。
提示:您可能希望将部分(a。)中找到的圆圈保存在某些圆圈中 数据结构,以便您可以在这部分中使用它们。
我的代码:python
import csv
csv_file = open ('hobbies.txt')
csv_reader = csv.reader(csv_file, delimiter=',')
csv_dict={}
for row in csv_reader:
k= row[0]
v = row[1:]
csv_dict[k] = [x.strip() for x in v]
for i in csv_dict.values():
i.pop()
keyList =[*csv_dict]
circle ={}
for i in range(len(keyList)):
i_item = keyList[i]
for j in range(i+1, len(keyList)):
j_item = keyList[j]
user1 = set(csv_dict[i_item])
user2 = set(csv_dict[j_item])
hob = user1.intersection(user2)
if (len(hob) > 1):
hob = tuple(hob)
circle[hob] = [i_item, j_item]
print(circle)
output:
{('cosplay', 'textiles'): ['2345', '4545'], ('orienteering', 'running'):
['4567', '5050'], ('orienteering', 'jumping', 'running'): ['8888', '5050'],
('dancing', 'singing'): ['9999', '1010'], ('cake', 'racing', 'decorating',
'car'): ['4545', '5050']}
现在我的代码只是在两个用户之间进行比较,我如何比较分享x爱好的3,4,5,......,n?
答案 0 :(得分:0)
您可以为共享它们的一组用户制作爱好词典。
说hobby_users
。使用此功能可以为共享它们的用户数量制作业余爱好词典(hobby_user_count
)。
user_hobbies = defaultdict(set)
all_hobbies = set()
for row in csv_reader:
user, hobbies = row[0], [h.strip() for h in row[1:]]
user_hobbies[user].update(hobbies)
all_hobbies.update(hobbies) # build set of hobbies to be used later
hobby_users = {
h: set(u for u, hs in user_hobbies.items() if h in hs) for h in all_hobbies
}
hobby_user_count = {
h: len(us) for h, us in hobby_users.items()
} # if you have hobby_users or
hobby_user_count = {
h: sum(1 for hs in user_hobbies.values() if h in hs) for h in all_hobbies
} # just using all hobbies
您可以在hobby_user_count
查找用户输入。
shared_hobbies_matching_count = [
h for h, user_count in hobby_user_count.items() if user_count is user_input
]