如何用另一个字典中的键替换字典中的值而不重复?

问题描述 投票:0回答:1

我想用 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 不变。我以前没有使用过字典,所以我对它很陌生 - 是因为我的键有多个值吗?

python dictionary
1个回答
0
投票

您解决问题的方法是正确的,但是您的代码和概念方法中存在一些误解,我们需要纠正。这是代码的分步说明和更正版本:

  1. 主要的误解似乎是关于如何尝试将
    my_dict
    中的值与
    dict_vals
    中的键相匹配。您的目标是,如果数字包含在
    my_dict
    的值集中,则用
    dict_vals
    中的相应键替换
    dict_vals
    中的数字。这个概念本身是正确的。
  2. 您使用
    enumerate
    并尝试通过索引替换集合中的值是不正确的,因为 Python 中的集合不支持索引。它们是无序集合,您无法使用索引访问或替换它们的元素。
  3. keys_replace.index(val)
    的使用也是不正确的,因为
    keys_replace
    是字典的键视图对象,并且字典是通过键访问的,而不是通过值或索引访问的。另外,Python 中的字典或其键/视图不存在
    .index
    方法。
  4. 由于您不熟悉 Python 中的字典和集合,请记住集合是唯一元素的集合,而字典将不可变键映射到可变值。这两种类型在各种场景中都非常强大且有用。

以下是如何使用正确的方法完成任务:

  1. 迭代
    my_dict
    中的每个键。
  2. 对于
    my_dict
    中的每个集合,检查每个数字以查看它是否属于
    dict_vals
    中的任何值集。
  3. 如果是,请将数字替换为
    dict_vals
    中的相应键。
  4. 确保处理
    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)

该代码执行以下操作:

  1. 它会迭代
    my_dict
    中的每个集合。
  2. 对于这些集合中的每个元素,它检查该元素是否存在于
    dict_vals
    的任何值集中。
  3. 如果在
    dict_vals
    的值集中之一找到元素,则与该值集对应的键将添加到新集合中。
  4. 如果某个元素与
    dict_vals
    中的任何值都不匹配,则会按原样添加到新集合中。
  5. 最后,将
    my_dict
    中的原始集合替换为新集合,从而实现所需的变换。
© www.soinside.com 2019 - 2024. All rights reserved.