如何将社交网络关系TXT文件转换为Python字典?
问题分析与解决方案
你的代码存在几个关键问题,导致无法得到预期结果:
- 错误使用了分隔符:文件里的好友关系是用空格分隔的,但你用了
split('-', '>'),完全不符合文件格式 - 未处理第一行的数字
20(这是总关系数,不需要加入字典) - 没考虑到只有单个名字的行(比如Lena、Rafael,这类人没有好友)
- 字典值应该用列表存储:一个人可能有多个好友,直接赋值会覆盖之前的记录
正确代码实现
with open('nw_data1.txt', 'r') as f: lines = f.readlines() file_dict = {} # 跳过第一行的数字行 for line in lines[1:]: # 去除首尾空白,按任意空格分割成元素(处理多个空格的情况) parts = line.strip().split() if not parts: continue # 跳过空行 name = parts[0] # 初始化列表(如果名字不在字典里) if name not in file_dict: file_dict[name] = [] # 如果有好友,添加到列表 if len(parts) >= 2: friend = parts[1] file_dict[name].append(friend) # 打印结果,格式为 名字 -> 好友1, 好友2 for name, friends in file_dict.items(): if friends: print(f"{name} -> {', '.join(friends)}") else: print(f"{name} -> 无好友")
代码说明
- 跳过第一行:
lines[1:]直接从第二行开始处理,忽略第一行的数字 - 处理多空格分割:
split()默认按任意数量的空格、制表符分割,解决了行里多个空格的问题 - 列表存储好友:每个名字对应一个列表,确保多个好友不会被覆盖
- 处理无好友的情况:单个名字的行,对应字典里的空列表,打印时标注“无好友”
运行后你会得到预期的格式,比如:
Robert -> Jack, Gary, Nick Lizzie -> Dave Lena -> 无好友 Mia -> Dave, Caroline ...
内容的提问来源于stack exchange,提问作者Piotr Telok
相关产品推荐
相关产品推荐

