用来自另一个字典的相应键值映射替换字典的值列表

时间:2021-01-28 19:35:56

标签: python list dictionary sublist

我有这两本字典:

Dict_Employee_ID = {'0': ['0', '1', '2'], '1': ['0', '1', '2']}    

Dict_ID_Shift = {'0': ['L', 'D'], '1': ['D', 'E', 'D'], '2': ['None', 'Any', 'Any']}

我的目标是当 Dict_Employee_ID 的键对应于 Dict_ID_Shift 的值时,将字典 Dict_ID_Shift 的值替换为字典 Dict_Employee_ID 的值

预期的输出应该是这样的:

{
    '0': [['L', 'D'], ['D', 'E', 'D'], ['None', 'Any', 'Any']], 
    '1': [['L', 'D'], ['D', 'E', 'D'], ['None', 'Any', 'Any']]
}

我尝试过使用intersection()方法,但没有得到预期的结果,你的策略是什么?谢谢

3 个答案:

答案 0 :(得分:0)

当在 Dict_ID_Shift 中找不到时,您没有提到您希望 Dict_Employee_ID 中的键的值等于什么,所以我假设您希望它保留其旧值。下面的代码应该会给你你正在寻找的结果:

Dict_ID_Shift_Values = list(Dict_ID_Shift.values())
for key in Dict_Employee_ID:
    if key in Dict_ID_Shift:
        Dict_Employee_ID[key] = Dict_ID_Shift_Values

答案 1 :(得分:0)

您可以使用字典理解并将值重新分配给 Dict_Employee_ID 为:

Dict_Employee_ID = {'0': ['0', '1', '2'], '1': ['0', '1', '2']}
Dict_ID_Shift = {'0': ['L', 'D'], '1': ['D', 'E', 'D'], '2': ['None', 'Any', 'Any']}

Dict_Employee_ID = {k: [Dict_ID_Shift[e] for e in v] for k, v in Dict_Employee_ID.items()}

其中 Dict_Employee_ID 将保存值:

{
    '0': [['L', 'D'], ['D', 'E', 'D'], ['None', 'Any', 'Any']],
    '1': [['L', 'D'], ['D', 'E', 'D'], ['None', 'Any', 'Any']]
}

如果你想替换现有的字典,那么你也可以编写显式的 for 循环来实现:

for k, v in Dict_Employee_ID.items():
    Dict_Employee_ID[k] = [Dict_ID_Shift[e] for e in v]

答案 2 :(得分:0)

遍历字典中的值,并相应地遍历每个值,使用 dict.get 检查成员资格:

for sub_list in dict_employee_id.values():
    for i, val in enumerate(sub_list):
        # Second argument will keep the value the same if it isn't
        # in the dictionary
        sub_list[i] = dict_id_shift.get(val, val)