带有dict的列表的子集和

时间:2016-06-03 20:50:58

标签: python list dictionary subset-sum

aList视为:

[
  {'name': 'Hailey', 'age': 20, 'id': 48479},
  {'name': 'John', 'age': 40, 'id': 18021},
  {'name': 'Asger', 'age': 18, 'id': 22281},
]

和给定的目标总和为targetSum = 50

问题是要使用密钥aList查看age,然后从aList中移除age的值不能合并为{(1}}的元素(大约)targetSum。 可以合并为(大约)targetSum的元素应该可以通过列表中的id进行检索。

或者为了避免删除元素,问题只是找到给定元素的所有可能组合,这些元素具有age属性,总结(大约)到targetSum

我有一个功能,可以在列表中查找子集来给出总和。但是,限制是它只需要一个数字列表[1, 2, 3, 4, ...]而不是字典。

def subsetInListForSum(numbers, target):
    results = []
    for x in range(len(numbers)):
        results.extend(
            [   
                combo for combo in combinations(numbers ,x)  
                    if sum(combo) == target
            ]   
        )   

    print(results)

非常感谢任何帮助:)

2 个答案:

答案 0 :(得分:2)

您的代码将按原样运行,因为aList仍然是一个列表。您只需将if条件更改为

即可
   if sum(val['age'] for val in combo) == target:

这样你的结果就是'变量将包含aList中字典元素的所有组合,其中年龄总和达到目标值。

答案 1 :(得分:0)

由于您的函数适用于列表,因此只需从词典aList列表中提取年龄列表,然后使用您的函数。

list_dicts = [{'name': 'Hailey', 'age': 20, 'id': 48479},
              {'name': 'John', 'age': 40, 'id': 18021},
              {'name': 'Asger', 'age': 18, 'id': 22281}]

list_ages = [d['age'] for d in list_dicts]

print(list_ages)
# Output
[20, 40, 18]