如何通过字符串动态指向列表变量并更新其值?
问题描述
我需要更新多个命名如下的列表:
ACL = [] ANL = [] APL = [] # 还有50+类似列表
同时我有一个存储这些列表名称字符串的数组:
CHOICES = [ 'ACL', 'ANL', 'APL' ]
目前我从数据库查询数据,当获取到对应列表的结果时更新该列表,查询和追加数据本身无问题,但需逐个处理每个列表。我希望遍历CHOICES,动态更新对应的列表。
当前实现方式(逐个处理):
acl_filtered_data = [{"results" : "result"} for j in qs if j.choice == 'ANL'] ACL.append(acl_filtered_data)
其余列表也采用同样方式处理。
我希望通过循环遍历所有CHOICES,将过滤后的数据追加到对应的列表中:
for i in CHOICES: filtered_data = [{"results" : "result"} for j in qs if j.choice == i] # 此处需动态指向对应列表并追加数据,不知如何实现
解决方案
方法一:使用字典存储列表(推荐)
把所有列表统一放到一个字典里,用列表名称作为key,这样可以直接通过key动态访问对应的列表,代码更清晰且易维护:
# 初始化字典,包含所有需要的列表 lists_dict = { 'ACL': [], 'ANL': [], 'APL': [], # 其他50+列表依次添加 } CHOICES = ['ACL', 'ANL', 'APL'] # 遍历CHOICES动态更新 for choice in CHOICES: filtered_data = [{"results": "result"} for j in qs if j.choice == choice] lists_dict[choice].append(filtered_data) # 之后访问列表直接用lists_dict['ACL']即可
如果需要保持原有的变量名(比如ACL、ANL),可以在初始化字典后额外赋值:
ACL = lists_dict['ACL'] ANL = lists_dict['ANL'] APL = lists_dict['APL']
这样后续既可以用字典操作,也可以直接用原变量名访问。
方法二:使用globals()或locals()(不推荐)
如果你必须保留原有的独立变量,也可以通过全局/局部变量字典来动态访问,但这种方式不够直观,且容易引发意外问题(比如误修改其他变量):
ACL = [] ANL = [] APL = [] CHOICES = ['ACL', 'ANL', 'APL'] for choice in CHOICES: filtered_data = [{"results": "result"} for j in qs if j.choice == choice] # 用globals()获取全局变量字典,通过key找到对应列表并追加 globals()[choice].append(filtered_data)
注意:如果这些列表是在函数内部定义的局部变量,需要用locals()代替globals(),但局部变量字典的修改行为在不同Python版本中可能有差异,因此更推荐第一种字典的方式。
内容的提问来源于stack exchange,提问作者atropa belladona
相关产品推荐
相关产品推荐

