如何在Python中将列表中的字符串转换为类的存储变量?
解决Python列表中字符串转类实例的问题
看起来你现在的核心需求是:把frnd_User_列表里的字符串(比如大小写字母)替换成对应的User_类实例,而不是单纯存字符串标识对吧?我来帮你调整代码实现这个目标:
修改后的完整代码
import networkx as nx import string import random class User_(): def __init__(self, id_): self.id_ = id_ self.G = nx.DiGraph() self.frnd_User_ = [] # 初始化空的好友实例列表 self.edge_User_ = [] # 1. 先建立所有用户ID到User_实例的映射字典 # 包含所有小写(女性)和大写(男性)字母用户 all_user_ids = list(string.ascii_lowercase) + list(string.ascii_uppercase) user_map = {user_id: User_(user_id) for user_id in all_user_ids} # 2. 为每个用户生成好友实例并构建关系 for current_user in user_map.values(): # 随机生成好友数量(原逻辑的seed) friend_count_seed = random.randint(0, 26) friend_instances = [] for _ in range(friend_count_seed): # 随机选男性用户实例(从映射字典中取) male_id = random.choice(list(string.ascii_uppercase)) friend_instances.append(user_map[male_id]) # 随机选女性用户实例 female_id = random.choice(list(string.ascii_lowercase)) friend_instances.append(user_map[female_id]) # 把好友实例赋值给当前用户的属性 current_user.frnd_User_ = friend_instances # 生成边并添加到用户的有向图中 current_user.edge_User_ = [(current_user.id_, frnd.id_) for frnd in friend_instances] current_user.G.add_edges_from(current_user.edge_User_)
关键改动说明
- 提前构建实例映射:用
user_map字典把每个用户ID(字母)和对应的User_实例绑定,这样后续可以直接通过ID快速获取到对应的类实例,而不是存字符串。 - 替换字符串为实例:原代码中直接把字母字符串添加到
frnd_User_,现在改成从user_map中取出对应的User_对象添加,这样列表里存储的就是类的实例,满足你的需求。 - 补全图边逻辑:原代码里
self.ed...没写完,这里补充了把边添加到用户的有向图G中的逻辑,保证功能完整。
可选优化:动态创建实例
如果不需要预先生成所有用户(比如有些用户可能永远不会被作为好友选中),可以用动态创建的方式,避免生成不必要的实例:
user_map = {} def get_or_create_user(user_id): """获取已有用户实例,不存在则创建""" if user_id not in user_map: user_map[user_id] = User_(user_id) return user_map[user_id] # 在生成好友时使用这个函数 for current_user in user_map.values(): friend_count_seed = random.randint(0, 26) friend_instances = [] for _ in range(friend_count_seed): male_user = get_or_create_user(random.choice(list(string.ascii_uppercase))) friend_instances.append(male_user) female_user = get_or_create_user(random.choice(list(string.ascii_lowercase))) friend_instances.append(female_user) current_user.frnd_User_ = friend_instances # 后续边的逻辑和上面一致
这样只有当某个用户被选中为好友时,才会创建对应的实例,节省资源。
内容的提问来源于stack exchange,提问作者snapper
相关产品推荐
相关产品推荐

