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}
我试图获得的结果可以这样表示:
- payment_max={'name':'Max','day':'day1+day2',付款(美元)':
2+1}
- payment_tom={'name':'Tom','day':'day3+day7+day8','付款
(美元)':5+6+8}
- payment_alison={'name': 'Alison','day':'day3', 'payment (dollars)':
3}
- 帕斯卡={'name': 'Pascal','day':'day3','payment (dollars)': 8}
我刚刚开始编程,这个问题可能有一个非常明显的解决方案,但我在尝试找出答案时有点困惑
非常感谢你
我不知道你是想要一堆变量名还是想要一个列表,但无论哪种情况,这里都有一种可行的方法:
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}}
我正在学习 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',付款(美元)': 2+1}
- payment_tom={'name':'Tom','day':'day3+day7+day8','付款 (美元)':5+6+8}
- payment_alison={'name': 'Alison','day':'day3', 'payment (dollars)': 3}
- 帕斯卡={'name': 'Pascal','day':'day3','payment (dollars)': 8}
我刚刚开始编程,这个问题可能有一个非常明显的解决方案,但我在尝试找出答案时有点困惑
非常感谢你
我不知道你是想要一堆变量名还是想要一个列表,但无论哪种情况,这里都有一种可行的方法:
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}}