繁体   English   中英

如何在 Python 中找到所有可能的字典值组合,同时仍保留键名

[英]How to find all possible combinations of dictionary values that add up to a certain number in Python while still retaining the key names

我有一本字典,其中的字段具有预先分配的分数。 例如,FirstNM 的得分为 300。这是一个示例字典:

my_dictionary = dict()
my_dictionary['FirstNM'] = 300
my_dictionary['LastNM'] = 500
my_dictionary['MiddlNM'] = 700

print(my_dictionary)

{'FirstNM': 300, 'LastNM': 500, 'MiddleNM': 700}

我需要找到总和超过 900 的字典值的所有可能组合。

我使用此代码查找所有可能的组合:

values = my_dictionary.values()
keys = my_dictionary.keys()

result = [seq for i in range(len(values), 0, -1) for seq in itertools.combinations(values, i) if sum(seq) >= 900]

print(result)

[(300, 500, 700), (300, 700), (500, 700)]

然后如何将键重新分配给值? 我已经查看了所有内容,无法确定如何执行此操作......最终,我想要组中的键而不是值。 任何帮助深表感谢。

期望的结果:

[('FirstNM', 'LastNM', 'MiddlNM'), ('FirstNM', 'LastNM'), ('LastNM', 'MiddlNM')]

将键而不是值和 map 组合到它们的值以进行总和测试:

result = [seq for i in range(len(values), 0, -1)
              for seq in itertools.combinations(keys, i)
              if sum(map(my_dictionary.get,seq)) >= 900]

print(result)
[('FirstNM', 'LastNM', 'MiddlNM'), ('FirstNM', 'MiddlNM'), ('LastNM', 'MiddlNM')]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM