如何在Python中使用for循环中的不同变量

时间:2015-07-16 17:24:07

标签: python dictionary

我试图在for循环中使用具有不同名称的变量。 在我解释其他任何内容之前,请允许我说this不是我遇到的问题。是的,我根据for循环的索引创建了不同的变量,但我从中了解了其他资源以及如何做到这一点。

我不知道怎么做是如何在for循环中调用不同的变量。我的意思是我想要这样的东西:

# pre-defined variables
object_1 = 7
object_2 = 8
object_3 = 51

# create new dictionary
Things = {}

# populate dictionary
for i in range(1,4):
    Things['thing_%d'%i] = object_i

所以我知道如何创建单独的新变量(使用字典Things)。我想要做的是有一种方法,如最后一行所示,程序识别带有索引iobject_i)的变量,用于定义Things中的元素字典thing_i

有没有办法在不必为每个变量编写单独的代码行的情况下执行此操作(如下所示)?

Things['thing_1'] = object_1
Things['thing_2'] = object_2
Things['thing_3'] = object_3

更新编辑和澄清:我无法使用字典定义object_1object_2object_3的原因是它们实际上并未在Python脚本。我必须从Salome(3D建模程序)文件中调用它们,它们被编入索引为Face_1Face_2等。我希望将所有内容都放在数组元素中(无需单独使用变量),但为了做到这一点,我仍然需要从Salome调用对象。我目前有一个脚本,我在Salome Python控制台中运行,这样开始,所以我可以访问Salome研究中的对象:

# Salome testing
import salome
salome.salome_init("C:\Users\Me\Study3.hdf")

import GEOM
from salome.geom import geomBuilder
geompy = geomBuilder.New(salome.myStudy)

# need to retrieve all objects from that study -----------
go = salome.myStudy.FindObjectByPath("/Geometry")
it = salome.myStudy.NewChildIterator( go )
it.InitEx(True)
while it.More():
    so = it.Value()
    it.Next()
    go = so.GetObject()
    if go:
        #print(so.GetName())
        exec( "%s = go"%so.GetName() )

5 个答案:

答案 0 :(得分:1)

您可以使用内置方法globals(),它会以这种方式返回{'object_name':object_value}字典:

default_value = 0
for i in range(1,4):
    Things['thing_%d'%i] = globals().get('object_%d' % i, default_value)

如果变量不存在,default_value会返回default_value而不是提出KeyError异常

答案 1 :(得分:1)

您可以遍历这些变量的值:

variables = (object_1, object_2, object_3)

Things = {}
for i, value in enumerate(variables):
    Things['thing_%d' % i] = value

此时,您还可以使用词典理解:

Things = { 'thing_%d' % i: value for i, value in enumerate(variables) }

但是,以动态的方式访问变量,而不首先指定它们,通常是一个坏主意,并且是一个糟糕设计的标志。您应该首先更改这些变量的创建方式。

答案 2 :(得分:1)

以下是做你想做的事的方法之一

object_1 = 7
object_2 = 8
object_3 = 51

Things = {}

for i in range(1,4):
    Things['thing_%d'%i] = globals()['object_%d'%i]

答案 3 :(得分:0)

您可以使用字典而不是三个不同的变量,键为object_i,值为值。示例 -

objects = {'object_1':7,
           'object_2':8,
           'object_3':51}

然后您就可以像为Things列表创建密钥一样访问字典值 -

for i in range(1,4):
    Things['thing_%d'%i] = objects['object_%d'%i]

以上将是更好的解决方案之一,但如果有理由你不能使用字典,你可以使用globals()函数返回全局命名空间(全局变量)作为字典然后你可以访问你的变量使用字符串。示例 -

object_1 = 7
object_2 = 8
object_3 = 51

# create new dictionary
Things = {}
gbl = globals()
# populate dictionary
for i in range(1,4):
    Things['thing_%d'%i] = gbl['object_%d'%i]

答案 4 :(得分:0)

您也可以尝试这种方式:

>>> object_1 = 7  
>>> vars()['object_1']
7