如何快速将Python变量转为以变量名为键的字典?
两种场景下生成目标字典的方法
场景1:从独立变量生成字典
如果是少量变量,最直接快速的方式就是手动构造字典字面量:
foo = 1 bar = 2 baz = 3 mydict = {'foo': foo, 'bar': bar, 'baz': baz}
要是变量数量较多,不想逐个编写,可以借助当前作用域的变量集合筛选:
# 筛选局部作用域中指定名称的变量 mydict = {k: v for k, v in locals().items() if k in ('foo', 'bar', 'baz')}
场景2:从变量值列表生成字典
注意:mylist = [foo, bar, baz]里仅存储了变量的值,没有保留变量名信息,所以需要额外提供变量名的字符串列表来对应键值:
foo = 1 bar = 2 baz = 3 mylist = [foo, bar, baz] # 定义对应变量名的键列表 keys = ['foo', 'bar', 'baz'] mydict = dict(zip(keys, mylist))
如果不想手动写键列表,也可以用inspect模块从作用域中匹配值对应的变量名(但要注意:如果多个变量值相同,会匹配到第一个出现的变量名,存在风险):
import inspect foo = 1 bar = 2 baz = 3 mylist = [foo, bar, baz] def get_var_names(value_list): frame = inspect.currentframe().f_back var_map = {} # 遍历作用域变量,避免值重复时覆盖 for k, v in frame.f_locals.items(): if v in value_list and k not in var_map: var_map[v] = k return [var_map[v] for v in value_list] mydict = dict(zip(get_var_names(mylist), mylist))
内容的提问来源于stack exchange,提问作者JFerro
相关产品推荐
相关产品推荐

