繁体   English   中英

带有dict的列表的子集总和

[英]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.

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