我得到了一个探索,我无法安静地解决一段时间,也许你们中的某个人可以帮助我。
因为它是一个更简单的代码并且很清楚它有什么好处,所以我想从代码开始:
#Create empty dictionary
lit_dict = {}
#List with different material names
mat_category_list = ['X', 'Y', 'Z', 'Default']
#Fill lit_dict with lists called e.g "lit_names_X" for every material
for mat in mat_category_list:
lit_dict['lit_name_%s'%mat.lower()] = [('Choose Manually','Choose Manually','Choose the value using the button below')]
到目前为止,代码工作正常。我为列表mat_category_list中存储的每个材料A获得了一个带有名为 lit_name_A 的密钥的字典(lit_dict)。此外,每个键的值都为('选择手动','手动选择','使用下面的按钮选择值')。这正是我想要的。每个价值都必须是一个元组。
现在我们遇到了问题。我为每种材料A都有一个名为 mat_properties_A 的字典。这些字典看起来就像那样。:
mat_properties_A= {'A.Geramy,2000':Material_Property(13700.0,0.38,reference='A.Geramy,2000',mat='Bone')
我现在想要一个循环,为每个材料添加一个mat_properties_A字典的每个键的名称作为我的 lit_dict 的元组到右侧列表 lit_name_A
循环看起来应该是这样的:
for mat in mat_category_list:
for lit in mat_properties_A.keys():
lit_dict['lit_value_%s'%mat.lower()] += [tuple([lit]*3)]
我的问题是,上面第二行中的A必须是动态的,这意味着它必须随着 mat 循环而改变。我尝试用setattr()左右解决这个问题,但它不起作用。
有没有人知道如何解决这个问题?
EDIT1: 要清除更多我想要实现的目标: 我正在和Blender合作。我有2个下拉菜单。我可以选择我想要的材料(例如X),然后选择第二个Dorpdown菜单(基于第一个drowpdon中的选择材料),我可以选择相应的文献名称。
例如:
下拉1:“X”
下拉列表2:显示列表中存储的所有名称 lit_name_x
这就是为什么我需要 mat_category_list 中每个材料的 lit_name_x 。 mat_category_list 包含可在下拉菜单1中选择的所有材料。由于用户可以创建自己的材料,并且拥有自己的文献,因此整个代码必须独立于材料的名称。
我希望更清楚我想要的“结果”
答案 0 :(得分:-2)
for mat in mat_category_list:
keys = eval("mat_properties_%s.keys()" % A)#here, A is the name from mat
for lit in keys:
lit_dict['lit_value_%s'%mat.lower()] += [tuple([lit]*3)]