[英]Subset sum for a list with dict
给定aList
为:
[
{'name': 'Hailey', 'age': 20, 'id': 48479},
{'name': 'John', 'age': 40, 'id': 18021},
{'name': 'Asger', 'age': 18, 'id': 22281},
]
给定的目标总和为targetSum = 50
。
问题是要通过键age
查看aList
,然后从aList
删除不能将age
值合并为等于(大约) targetSum
。 可以组合成等于(近似) targetSum
应通过列表中的id
进行检索。
另外,为了避免删除元素,问题很简单,就是找到给定元素的所有可能组合,这些组合的age
属性targetSum
(近似)为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)
任何帮助将不胜感激:)
您的代码将按原样运行,因为aList仍然是列表。 您只需要将if条件更改为
if sum(val['age'] for val in combo) == target:
这样,您的“结果”变量将由aList中字典元素的所有组合组成,其年龄之和等于目标值。
由于您的函数适用于列表,因此只需从字典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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.