几个dicts的组合python

2024-04-26 14:05:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有15个像下面3个一样的词(15个词的长度都不一样)。 例如:

 HQDict = {'HQ1':10, 'HQ2':3, 'HQ3':5}
 BADict = {'BA1':15, 'BA2':4, 'BA3':3}
 STDict = {'ST1':5, 'ST2':4, 'ST3':3}

我想创建15个dict的所有可能的组合,每个dict只选择一个元素,将值加在一起,键存储在一个列表中。我已经能够把所有的信息都写进各自的口述中,但是我不知道从哪里开始组合,我已经看到了工具组合但我不确定如何使它只从每个dict中选择一个元素。如果您需要更多信息,请询问,我很乐意编辑。在

编辑1: 我还需要补充的是,这些值是相加的,所以BA2的值是BA1+BA2的值,组合可以是1的列表。在

^{pr2}$

编辑2:

与其尝试创建dicts的组合,最终目标是给函数一个总数,它将返回所有可能的建筑组合(每个dict代表一个建筑,dict中的每个项目都是一个级别),这些组合加起来就是这个总数。例如:

combinations(34) would return
[HQ1,BA2,ST1]
and combinations(13 would return
[HQ2]

粘贴到包含所有建筑物和im用于创建dicts的代码的文件:link to pastebin


Tags: 信息元素编辑列表dictdicts总数建筑
1条回答
网友
1楼 · 发布于 2024-04-26 14:05:24

I have seen itertools.combinations but I'm not sure how to make it only select 1 element from each dict.

请改用itertools.product(..)。它需要一个不同的参数列表,每个参数对应一个要在一次迭代中选择的选项列表:

>>> map(dict, product(HQDict.items(), STDict.items(), BADict.items()))
[{'HQ1': 10, 'BA2': 4, 'ST1': 5}, {'HQ1': 10, 'ST1': 5, 'BA3': 3}, ...... ]

如果你有15条这样的话,我建议把它们都列在一个列表中,然后调用下面这样的产品:

^{pr2}$

编辑:在python3中,您将获得一个map对象,并且您必须迭代它以获得实际值。您可以将其转换为一个列表,但这将破坏map返回您可以迭代的内容的目的。您可以转换为如下列表:

>>> [dict(x) for x in product(HQDict.items(), STDict.items(), BADict.items())]
[{'HQ1': 10, 'BA2': 4, 'ST1': 5}, {'HQ1': 10, 'ST1': 5, 'BA1': 15}, ..]

相关问题 更多 >