【发布时间】:2015-11-12 14:51:21
【问题描述】:
我有一段时间无法解决的问题,也许你们中的某个人可以帮助我。
因为它是一个更简单的代码并且很清楚它有什么好处,所以我想从代码开始:
#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_dict),其中包含一个名为 lit_name_A 的键。此外,每个键都有值 ('Choose Manually','Choose Manually','Choose the value using the button below')。这正是我想要的。每个值都必须是一个元组。
现在我们要解决问题了。对于每种材料 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_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() 左右来解决这个问题,但它不起作用。
有人知道如何解决这个问题吗?
编辑1: 为了更清楚我想要实现的目标: 我正在使用搅拌机。我有 2 个下拉菜单。我可以在其中选择我想要的材料(例如 X),然后是第二个 Dorpdown 菜单,然后(根据第一个下拉菜单中选择的材料)我可以选择相应的文学名称。
例如:
下拉菜单 1:“X”
下拉菜单 2:显示存储在列表 lit_name_x
中的所有名称这就是为什么我需要为 mat_category_list 中的每种材料设置一个 lit_name_x。 mat_category_list 包含可以在下拉菜单 1 中选择的所有材料。由于用户能够创建自己的材料,具有自己的文献,整个代码必须独立于材料的名称。
我希望更清楚我想要什么作为“结果”
【问题讨论】:
-
既然您已经证明您知道如何使用字典,为什么不使用其他字典?
-
我想我不完全理解你的方法/提示。所以我应该创建一个字典,其中 mat_properties_A 作为键,名称作为值,然后融合字典?
-
所以你会有
{'mat_properties_A': {'A.Germany,2000': Material_Property(..), ...}, ...}。 -
你可以添加你想要的输出吗?或者你到底想要什么?
-
@SuJaY :我编辑了我的原始帖子以澄清更多
标签: python list dictionary dynamic