Python, 合并词典

Python, Merging dictionaries

我正在学习 python,这里我有一个任务。我想弄清楚如何通过一个键合并选择它们的字典并更新剩余的值。这是词典:

我试图获得的结果可以这样表示:

我刚刚开始编程,这个问题可能有一个非常明显的解决方案,但我在尝试找出答案时有点困惑

非常感谢你

我不知道你是想要一堆变量名还是想要一个列表,但无论哪种情况,这里都有一种可行的方法:

act1= {'name': 'Max', 'day':1, 'payment (dollars)': 2}
act2= {'name': 'Tom', 'day':3, 'payment (dollars)': 5}
act3= {'name': 'Alison', 'day':2, 'payment (dollars)': 3}
act4= {'name': 'Pascal', 'day':3, 'payment (dollars)': 8}
act5= {'name': 'Tom', 'day':7, 'payment (dollars)': 6}
act6= {'name': 'Max', 'day':2, 'payment (dollars)': 1}
act7= {'name': 'Tom', 'day':8, 'payment (dollars)': 8}

# make variables into list for easier handling (or just start with one, hopefully)
def take_act_vars_to_list():
    global_vars = globals()
    act_list = []
    for num in range(1, 8):  # this is hardcoded, but could be inferred
        key_now = "act" + str(num)
        assert(key_now in global_vars)  # check that the variable exists
        act_list.append(global_vars[key_now])
    return act_list

# merge and update dictionary elements
def update_dict(dict_to_update, reference_dict):
    # update dictionary from the duplicate references
    for key in reference_dict:
        if key is not "name":
            if key in dict_to_update:
                dict_to_update[key] += reference_dict[key]
            else:  # make new key and entry
                dict_to_update[key] = reference_dict[key]
    return

act_list = take_act_vars_to_list()
merged_vars = {}
for dict_now in act_list:  # iterate over dictionary entries
    name_now = dict_now["name"]  # want to merge based on name
    if name_now not in merged_vars:  # initialize a new dictionary
        merged_vars[name_now] = {}
        update_dict(merged_vars[name_now], dict_now)
    else:  # update existing dictionary
        sub_dict = merged_vars[name_now]
        update_dict(sub_dict, dict_now)

对于这个例子,merged_vars 的结果是

{'Max': {'day': 3, 'payment (dollars)': 3}, 'Tom': {'day': 18, 'payment (dollars)': 19}, 'Alison': {'day': 2, 'payment (dollars)': 3}, 'Pascal': {'day': 3, 'payment (dollars)': 8}}