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)]