Python 用动态值填充字典

Python 用动态值填充字典,python,list,dictionary,dynamic,Python,List,Dictionary,Dynamic,我遇到了一个我一时无法解决的问题,也许你们中的某个人可以帮我 因为这是一个更简单的代码,而且很清楚它有什么好处,我想从代码开始: #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 ma

我遇到了一个我一时无法解决的问题,也许你们中的某个人可以帮我

因为这是一个更简单的代码,而且很清楚它有什么好处,我想从代码开始:

#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')]
到目前为止,代码运行良好。我得到了一本字典(lit_dict),上面有一个名为lit_name_a的键,用于存储在列表mat_category_列表中的每种材料a。此外,每个键都有一个值(“手动选择”、“手动选择”、“使用下面的按钮选择值”)。这正是我想要的。每个值都必须是一个元组

现在我们开始讨论这个问题。对于每种材料a,我都有一个名为mat_properties_a的字典。这些字典看起来像这样,例如:

mat_properties_A= {'A.Geramy,2000':Material_Property(13700.0,0.38,reference='A.Geramy,2000',mat='Bone')
我现在想要一个循环,它为每个材质a添加mat_properties_dictionary的每个键的名称,作为元组添加到右侧列表lit_name_a的lit_dict中

循环应如下所示:

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: 为了更清楚地了解我想要实现的目标: 我在和搅拌机一起工作。我有两个下拉菜单。其中我可以选择我想要的材料(例如X),然后是第二个Dorpdown菜单(基于第一个drowpdon中选择的材料),我可以选择相应的文献名称

例如:


下拉列表1:“X”


下拉列表2:显示列表中存储的所有名称


这就是为什么我需要为mat_category_列表中的每种材质指定一个Light_name_x。材料类别列表包含可在下拉菜单1中选择的所有材料。因为用户可以用自己的文献创建自己的材料,所以整个代码必须独立于材料的名称


我希望能更清楚地知道我想要什么“结果”

既然你已经证明你知道如何使用字典,为什么不使用另一本字典呢?我想我还不完全理解你的方法/技巧。所以我应该创建一个字典,用mat_properties_a作为键,名称作为值,然后融合dicitonaries?这样你就有了
{'mat_properties_a':{'a.Germany,2000':Material_Property(…),…},}
。你能添加你想要的输出吗?或者你到底想要什么?@SuJaY:我编辑了我的原始帖子,以澄清更多的
eval
几乎从来都不是正确的做事方式。谢谢你的提示@Hooting。我现在完全得到了我想要的:)
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)]