将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)
非常感谢任何帮助:)
答案 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]