获取与python中的对象对应的所有可能变量名的列表[重复]
Posted
技术标签:
【中文标题】获取与python中的对象对应的所有可能变量名的列表[重复]【英文标题】:Get a list of all possible variable names corresponding to an object in python [duplicate] 【发布时间】:2018-02-12 20:15:30 【问题描述】:假设我定义了这些变量
a=1
b="2"
c=2
d=2
e="2"
我需要一种方法来获取可以与我指定的对象配对的所有变量名。例如,如果我指定“2”,它应该返回 [“b”,“e”],因为它们是值为“2”的两个变量。如果我指定整数 2,它应该给我 ["c","d"]。有没有办法做到这一点?我也在寻找pythonic的答案。
【问题讨论】:
有什么理由不能使用字典? (myobjects['a'] = 1
、myobjects['b'] = "2"
等)这将更容易使用。
没有pythonic方法可以做到这一点,您必须检查所有可能的名称空间中所有可能的名称:对象对以获得一般答案。如果您可以限制为名称空间,例如globals
然后你可以检查那个命名空间。一般来说,你不应该依赖这种东西,除非你正在构建一个调试器或其他东西
@juanpa.arrivillaga 您标记的副本与我提出的问题几乎无关
@Qwerty 当然可以,它是关于从对象中检索变量名作为字符串。
@juanpa.arrivillaga 这不是重复的,因为该问题没有我的问题的答案
【参考方案1】:
对于全局变量,扫描globals()
字典并提取具有您要查找的值的变量:
a=1
b="2"
c=2
d=2
e="2"
print([k for k,v in globals().items() if v=="2"])
结果:
['e', 'b']
使用locals()
的本地人也是如此。要测试局部变量和全局变量,请链接两个 dict 项并使用 set
,因为值会根据范围重复:
k for k,v in itertools.chain(locals().items(),globals().items()) if v=="2"
【讨论】:
谢谢!这正是我想要的。以上是关于获取与python中的对象对应的所有可能变量名的列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章