Skip to main content
 首页 » 编程设计

Python 字典 : Add to the key sum of values fulfilling given condition

2025年05月04日31unruledboy

我遵循嵌套字典,其中第一个数字是资源 ID(ID 的总数大于 100 000):

dict = {1: {'age':1,'cost':14,'score':0.3}, 
        2: {'age':1,'cost':9,'score':0.5}, 
        ...} 

我想向每个资源添加得分低于给定资源的资源成本总和。我可以通过以下代码添加等于 0 的“sum_cost”键:

for id in adic: 
    dict[id]['sum_cost'] = 0 

它给了我以下内容:

dict = {1: {'age':1,'cost':14,'score':0.3, 'sum_cost':0}, 
        2: {'age':1,'cost':9,'score':0.5,'sum_cost':0}, 
        ...} 

现在我想理想地使用 for 循环(使代码易于阅读)为每个 sum_cost 分配一个等于分数低于给定 ID 的 ID 成本总和的值。

理想的输出看起来像字典,其中每个 ID 的“sum_cost”等于分数低于给定 ID 的 ID 的成本:

dict = {1: {'age':1,'cost':14,'score':0.3, 'sum_cost':0}, 
        2: {'age':1,'cost':9,'score':0.5,'sum_cost':21}, 
        3: {'age':13,'cost':7,'score':0.4,'sum_cost':14}} 

有什么办法吗?

请您参考如下方法:

注意事项:

使用 sorted method用于排序对应于键 score

的字典输出

dictionary get method 获取字典值

并使用临时变量进行累积加法 os sum_cost

代码:

dicts = {1: {'age': 1, 'cost': 14, 'score': 0.3, 'sum_cost': 0}, 
         2: {'age': 1, 'cost': 9, 'score': 0.5, 'sum_cost': 0}, 
         3: {'age': 13, 'cost': 7, 'score': 0.4, 'sum_cost': 0}} 
 
sum_addition = 0 
 
for key, values in sorted(dicts.items(), key=lambda x: x[1].get('score', None)): 
    if dicts[key].get('score') is not None: #By default gives None when key is not available 
        dicts[key]['sum_cost'] = sum_addition 
        sum_addition += dicts[key]['cost'] 
        print key, dicts[key] 

@BernarditoLuis 和@Kevin Guan 建议的更简化的方法

代码2:

dicts = {1: {'age': 1, 'cost': 14, 'score': 0.3, 'sum_cost': 0}, 
         2: {'age': 1, 'cost': 9, 'score': 0.5, 'sum_cost': 0}, 
         3: {'age': 13, 'cost': 7, 'score': 0.4, 'sum_cost': 0}} 
 
sum_addition = 0 
 
for key, values in sorted(dicts.items(), key=lambda x: x[1].get('score', None)): 
    if dicts[key].get('score'): #By default gives None when key is not available 
        dicts[key]['sum_cost'] = sum_addition 
        sum_addition += dicts[key]['cost'] 
        print key, dicts[key] 

输出:

1 {'sum_cost': 0, 'age': 1, 'cost': 14, 'score': 0.3} 
3 {'sum_cost': 14, 'age': 13, 'cost': 7, 'score': 0.4} 
2 {'sum_cost': 21, 'age': 1, 'cost': 9, 'score': 0.5}