获取与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'] = 1myobjects['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中的对象对应的所有可能变量名的列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PyMongo:如何获取与任何可能的过滤器匹配的所有对象?

Python如何获取变量名的值? [复制]

mybitis中对象字段与表中字段名称不匹配(复制)

python中的闭包,迭代器.

python 小兵迭代器

python函数名的应用闭包和迭代器