我想用 dict_values 中对应值的键替换 my_dict 中的值:
my_dict = {0:{2,3}, 1:{0,4,5}, 2:{0,1,5,7}}
dict_vals = {'val1':{1,2,3},'val2':{7,8}]
但是删除每个键中的任何重复以获得此:
my_dict = {0:{'val1'}, 1:{0,4,5}, 2:{0,'val1',5,'val2'}}
我已经尝试了其他问题中建议的以下代码:
keys_replace = dict_vals.keys()
for key in my_dict.keys():
for i, val in enumerate(my_dict[key], 0):
if val in keys_replace:
index_to_replace = keys_replace.index(val)
my_dict[key][i] = dict_vals[keys_replace[index_to_replace]]
但它只是返回 my_dict 不变。我以前没有使用过字典,所以我对它很陌生 - 是因为我的键有多个值吗?
您解决问题的方法是正确的,但是您的代码和概念方法中存在一些误解,我们需要纠正。这是代码的分步说明和更正版本:
my_dict
中的值与 dict_vals
中的键相匹配。您的目标是,如果数字包含在 my_dict
的值集中,则用 dict_vals
中的相应键替换 dict_vals
中的数字。这个概念本身是正确的。enumerate
并尝试通过索引替换集合中的值是不正确的,因为 Python 中的集合不支持索引。它们是无序集合,您无法使用索引访问或替换它们的元素。keys_replace.index(val)
的使用也是不正确的,因为keys_replace
是字典的键视图对象,并且字典是通过键访问的,而不是通过值或索引访问的。另外,Python 中的字典或其键/视图不存在 .index
方法。以下是如何使用正确的方法完成任务:
my_dict
中的每个键。my_dict
中的每个集合,检查每个数字以查看它是否属于 dict_vals
中的任何值集。dict_vals
中的相应键。my_dict
中每组内的唯一性要求。my_dict = {0: {2, 3}, 1: {0, 4, 5}, 2: {0, 1, 5, 7}}
dict_vals = {'val1': {1, 2, 3}, 'val2': {7, 8}}
for key, values in my_dict.items():
new_values = set() # A new set to store updated values for this key
for value in values:
replaced = False
for dict_val_key, dict_val_values in dict_vals.items():
if value in dict_val_values:
new_values.add(dict_val_key) # Replace value with dict_val_key
replaced = True
break # Stop searching once a replacement is found
if not replaced:
new_values.add(value) # Keep the original value if no replacement was found
my_dict[key] = new_values # Update the set for this key in my_dict
print(my_dict)
该代码执行以下操作:
my_dict
中的每个集合。dict_vals
的任何值集中。dict_vals
的值集中之一找到元素,则与该值集对应的键将添加到新集合中。dict_vals
中的任何值都不匹配,则会按原样添加到新集合中。my_dict
中的原始集合替换为新集合,从而实现所需的变换。