【问题标题】:Python, Merging dictionariesPython,合并字典
【发布时间】:2020-07-02 19:20:22
【问题描述】:

我正在学习 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}

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

  • payment_max={'name': 'Max', 'day':'day1+day2', payment (dollars)': 2+1}
  • payment_tom={'name': 'Tom', 'day':'day3+day7+day8','payment (美元)':5+6+8}
  • payment_alison={'name': 'Alison','day':'day3', 'payment (dollars)': 3}
  • pascal={'name': 'Pascal','day':'day3','payment (dollars)': 8}

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

非常感谢你

【问题讨论】:

    标签: python dictionary merge key-value


    【解决方案1】:

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

    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}}
    

    【讨论】:

    • 安德鲁,非常感谢您的宝贵时间!你真的帮了我!
    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 2012-08-11
    • 2012-07-17
    • 2018-10-16
    • 2011-11-16
    • 1970-01-01
    相关资源
    最近更新 更多