【发布时间】:2017-06-06 05:22:52
【问题描述】:
我有以下字典:
intervals = {'param1': [0, 1],
'param2_hi': [4, 5, 6, 7, 8, 9],
'param2_lo': [0, 1, 2, 3, 4, 5],
'param3_hi': [9, 10, 11, 12, 13, 14, 15],
'param3_lo': [5, 6, 7, 8, 9, 10],
'param4': [0, 1],
'param5_hi': [4, 5, 6, 7, 8, 9],
'param5_lo': [0, 1, 2, 3, 4, 5]}
我将如何创建这本字典的所有可能子集,其中我必须为 'paramx' 的每个数字 x 恰好有一个?这意味着我只能有一个用于 param1(_lo 或 _hi)的条目,一个用于 param2(_lo 或 _hi)的条目,依此类推,并且每个子集必须包含每个没有 _lo 或 _hi 的 paramx。
这里有两个可能的子集:
subset_one = {'param1': [0, 1],
'param2_hi': [4, 5, 6, 7, 8, 9],
'param3_hi': [9, 10, 11, 12, 13, 14, 15],
'param4': [0, 1],
'param5_hi': [4, 5, 6, 7, 8, 9]}
subset_two = {'param1': [0, 1],
'param2_lo': [0, 1, 2, 3, 4, 5],
'param3_lo': [5, 6, 7, 8, 9, 10],
'param4': [0, 1],
'param5_lo': [0, 1, 2, 3, 4, 5]}
# Example of mixed '_hi' and '_lo' intervals
subset_three = {'param1': [0, 1],
'param2_lo': [0, 1, 2, 3, 4, 5],
'param3_hi': [9, 10, 11, 12, 13, 14, 15],
'param4': [0, 1],
'param5_lo': [0, 1, 2, 3, 4, 5]}
...
注意:我想保留键值对。
编辑:添加了 subset_three 以显示混合 '_lo' 和 '_hi' 间隔的可能性。
【问题讨论】:
-
这些是您仅有的钥匙吗?
-
这是一个有限的参数列表吗?这些是他们的真实姓名吗?他们总是以递增顺序加上数字后缀吗?
-
可能还有更多(取决于我的程序的不同运行),但键的形式总是 paramx、paramx_lo、paramx_hi,其中 x 是某个整数。
-
@zwer,后缀整数总是递增的。数字之间不会有跳过。
-
@ToddYoung - Jared Goguen 咬了我一口 - 对我的评论稍作修正,他的解决方案应该完全符合您的需要。
标签: python dictionary combinations