【问题标题】:Fill dictionary with dynamic values用动态值填充字典
【发布时间】: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_xmat_category_list 包含可以在下拉菜单 1 中选择的所有材料。由于用户能够创建自己的材料,具有自己的文献,整个代码必须独立于材料的名称。

我希望更清楚我想要什么作为“结果”

【问题讨论】:

  • 既然您已经证明您知道如何使用字典,为什么不使用其他字典?
  • 我想我不完全理解你的方法/提示。所以我应该创建一个字典,其中 mat_properties_A 作为键,名称作为值,然后融合字典?
  • 所以你会有{'mat_properties_A': {'A.Germany,2000': Material_Property(..), ...}, ...}
  • 你可以添加你想要的输出吗?或者你到底想要什么?
  • @SuJaY :我编辑了我的原始帖子以澄清更多

标签: python list dictionary dynamic


【解决方案1】:
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)]

【讨论】:

  • eval 几乎是从不正确的做事方式。
  • 感谢@Hooting 的提示。我现在得到了我想要的:)
猜你喜欢
  • 2013-04-28
  • 2021-07-28
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 2022-12-24
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多