Python字典查询时如何获取值对应的原变量名称
可行实现方案
方案1:直接修改字典存储内容(最简单推荐)
如果你不需要在这个字典中保留原字符串值,直接把字典的值存为变量名的字符串即可:
AMTVALUE1 = "string 1" AMTVALUE2 = "string 2" all_templates = { "amt": "AMTVALUE1", "cmvb": "AMTVALUE2", }
此时执行all_templates["amt"]就会直接返回AMTVALUE1,完全符合需求。如果后续需要用到对应的原字符串值,可以通过globals()[all_templates["amt"]]获取到string 1。
方案2:字典值存元组,同时保留变量名和原字符串
如果你需要同时使用变量名和原字符串值,可以把值存为二元组,再写辅助函数分别取对应内容:
AMTVALUE1 = "string 1" AMTVALUE2 = "string 2" all_templates = { "amt": ("AMTVALUE1", AMTVALUE1), "cmvb": ("AMTVALUE2", AMTVALUE2), } # 获取变量名 def get_var_name(key): return all_templates[key][0] # 获取原字符串值 def get_str_value(key): return all_templates[key][1]
调用示例:
get_var_name("amt")返回AMTVALUE1get_str_value("amt")返回string 1
方案3:自动反向查找变量名(不推荐,有局限性)
如果不想手动写变量名字符串,可以通过全局变量字典反向匹配,但如果存在多个变量值完全相同的情况,会出现匹配错误的问题,仅适合变量值全局唯一的场景:
AMTVALUE1 = "string 1" AMTVALUE2 = "string 2" all_templates = { "amt": AMTVALUE1, "cmvb": AMTVALUE2, } def get_var_name(key): target_value = all_templates[key] for var_name, var_value in globals().items(): if var_value == target_value and not var_name.startswith('_'): return var_name return None
调用get_var_name("amt")可返回AMTVALUE1
注意:该方法在出现同值变量时会返回第一个匹配到的变量名,结果不可控,非特殊场景不建议使用。
内容的提问来源于stack exchange,提问作者iambdot
相关产品推荐
相关产品推荐

