如何在python中优雅地重置多个字典的值

2024-10-04 09:20:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个代码,该代码从数据库中提取数据,并基于不同类型的表,将数据存储在字典中以供进一步使用。
这段代码处理大约20-30个不同的表,因此有20-30个字典和一些列表,我已经将它们定义为类变量,以便在代码中进一步使用。
比如说

class ImplVars(object):
    #dictionary capturing data from Asset-Feed table
    general_feed_dict = {}
    ports_feed_dict = {}
    vulns_feed_dict = {}
    app_list = []
    ...

我想在添加数据之前清除这些词典。
最简单或常见的方法是使用clear()函数,但此代码是可重复的,因为我必须为每个dict编写代码。
我正在探索的另一个选项是使用dir()函数,但它将变量名作为字符串返回

是否有任何优雅的方法可以让我获取所有这些类变量并清除它们


Tags: 数据方法函数代码数据库类型列表dictionary
3条回答

您可以按照建议使用内省:

for d in filter(dict.__instancecheck__, ImplVars.__dict__.values()):
    d.clear()

或不太神秘的封面清单和口述:

for obj in ImplVars.__dict__.values():
    if isinstance(obj, (list, dict)):
        obj.clear()

但我建议您选择一种不同的数据结构,以便更加明确:

class ImplVars(object):
    data_dicts = {
        "general_feed_dict": {},
        "ports_feed_dict": {},
        "vulns_feed_dict": {},
    }

现在,您可以显式地在ImplVars.data_dicts.values上循环,并且仍然有其他您可能不想清除的类变量

代码:

a_dict = {1:2}
b_dict = {2:4}
c_list = [3,6]

vars_copy = vars().copy()
for variable, value in vars_copy.items():
    if variable.endswith("_dict"):
        vars()[variable] = {}
    elif variable.endswith("_list"):
        vars()[variable] = []
print(a_dict)
print(b_dict)
print(c_list)

结果:

{}
{}
[]

也许一种更简单的实现方式是创建一个要清除的字典和列表的列表,然后让循环将它们全部清除

d = [general_feed_dict, ports_feed_dict, vulns_feed_dict, app_list]
for element in d:
    element.clear()

你也可以使用列表理解

相关问题 更多 >