我正在尝试创建一个名称来自变量的字典。
这是因为可能有更好的方法:
我正在使用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/