如何通过返回汇总的值来更新字典中的值?

How do I update the values inside a dictionary by returning the values summed up?

在这个问题中,参数 collapse_values 接受一个字典并且必须更新值,这些值在列表中有整数到一个总和。例如:{'a':[1, 2, 3], 'b':[4, 5, 6]} 变为 {'a': 6, 'b': 15},我必须检查它是否与主函数中提供的字典匹配。

def main():
    data = {'a':[1, 2, 3], 'b':[4, 5, 6]}
    collapse_values(data)
    print(data == {'a': 6, 'b': 15})

    data = {'h':[1, 1, 1, 1, 1], 'e':[1, 1, 1, 1, 1], 'l':[2, 2, 2, 2, 2], 'o':[1, 1, 1, 1, 1]}
    collapse_values(data)
    print(data == {'h': 5, 'e': 5, 'l': 10, 'o':5})

def collapse_values(dict1):
    for value in dict1.values():
        value_sum = sum(value)
    if value_sum not in dict1:
        dict1[value] = value
    return dict1

main()

我尝试仅遍历字典的值并对值求和,如果尚未更新值,则尝试更新。

但是我收到了这个错误,“TypeError: unhashable type: 'list'.

使用字典理解对值求和 sum():

{k: sum(v) for k, v in d.items()}

其中 d 是字典。

在函数中:

def collapse_values(dict1):
    return {k: sum(v) for k, v in dict1.items()}
if value_sum not in dict1:
        dict1[value] = value

将无法工作,因为您遍历了 dict1.values()

您可以这样更改代码:

for value in dict1:
    value_sum = sum(dict1[value])

并更新值:

dict1[value] = value_sum

你已经捕获了返回值(如果你不 cathed 没问题,数据将被更改)并且还对 dict 的值进行了求和,这是一个列表:

def main():
    data = {'a':[1, 2, 3], 'b':[4, 5, 6]}
    data = collapse_values(data)
    print(data == {'a': 6, 'b': 15})

    data = {'h':[1, 1, 1, 1, 1], 'e':[1, 1, 1, 1, 1], 'l':[2, 2, 2, 2, 2], 'o':[1, 1, 1, 1, 1]}
    data = collapse_values(data)
    print(data == {'h': 5, 'e': 5, 'l': 10, 'o':5})

def collapse_values(dict1):
    for key, value in dict1.items():
        dict1[key] = sum(value)
    return dict1

main()

输出:

True
True

您可以使用以下逻辑来计算总和:

dict1= {'a':[1,2,3],'b':[4,5,6]}

for key in dict1.keys():
   dict1[key] = sum(dict1[key])

dict1
['a':6,'b':15]