我正在尝试创建一个名称来自变量的字典。

这是因为可能有更好的方法:
我正在使用API​​来获取“对象”的属性。 (名称,说明,X,Y,Z)等。我想以“对象”保留数据的方式存储此信息。

为了获得此信息,API遍历所有“对象”。

所以我的建议是,如果对象名称是我要“捕获”的对象名称之一,那么我想创建一个具有该名称的字典,如下所示:

ObjectName = {'Description': VarDescrption, 'X': VarX.. etc}


(在我说"Varetc..."的地方,这就是API传递的该属性的值。

现在,由于我提前知道了名称列表,因此我可以使用很长的If树,但正在寻找更容易编写代码的方式来完成此操作。 (并且可扩展,而无需添加太多代码)

这是我有的代码:

def py_cell_object():
    #object counter - unrelated to question
    addtototal()
    #is this an object I want?
    if aw.aw_string (239)[:5] == "TDT3_":
        #If yes, make a dictionary with the object description as the name of the dictionary.
        vars()[aw.aw_string (239)]={'X': aw.aw_int (232), 'Y': aw.aw_int (233), 'Z': aw.aw_int (234), 'No': aw.aw_int (231)}
        #print back result to test
        for key in aw.aw_string (239):
            print 'key=%s, value=%s' % (key, aw.aw_string (239)[key])


这是显示“ aw”是什么的前两行代码

from ctypes import *
aw = CDLL("aw")


解释API调用中的数字是什么:

231 AW_OBJECT_NUMBER,

232 AW_OBJECT_X,

第233章

第234章

第239章

231-234是整数,239是字符串

最佳答案

我推断出您正在使用Active Worlds SDK。首先在将来的问题中提到它会节省时间。

我想您的目标是创建一个顶级词典,其中每个键都是对象描述。每个值都是另一个字典,存储该对象的许多属性。

我快速浏览了Wiki上的AW SDK文档,但没有找到向SDK请求属性名称,ID和类型列表的方法。因此,您将不得不以某种方式在程序中对这些信息进行硬编码。除非在其他地方需要它,否则最简单的方法就是在创建字典的地方对其进行硬编码,这就是您已经在做的事情。要打印出来,只需打印属性字典的repr。我可能会更像这样格式化您的方法:

def py_cell_object():
    #object counter - unrelated to question
    addtototal()

    description = aw.aw_string(239)
    if description.startswith("TDT3_"):
        vars()[description] = {
            'DESCRIPTION': description,
            'X': aw.aw_int(232),
            'Y': aw.aw_int(233),
            'Z': aw.aw_int(234),
            'NUMBER': aw.aw_int (231),
            ... etc for remaining attributes
        }

        print repr(vars()[description])


有人认为您应该为数字232、233、234等创建命名常量,但是我认为这样做的理由很少,除非您需要在多个位置使用它们,或者除非很容易从SDK中自动生成它们(对于例如,通过解析.h文件)。

关于python - 如何在Python中基于变量值创建字典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17205763/

10-11 23:09
查看更多