Обновление ключей в несбалансированных словарях с разным количеством ключей

#python-3.x #dictionary

#python-3.x #словарь

Вопрос:

Я хотел бы обменять ключ в d1 на ключ в d2 на основе тех же значений списка. Например, у меня есть следующие оригинальные словари:

 d1={'work': ['fulltime','partime','intership','volunteer'], 
    'thing': ['science', 'grammar', 'universe', 'unicorn']}

d2={'working': ['fulltime','partime','intership','volunteer','working']}
  

Я знаю, что обновление словаря ключей следующим образом добавит обновленный ключ в конец словаря, который в данном случае не предназначен:

 d1['working']=d1.pop('work')
  

Как я могу обновить ключ при таких обстоятельствах?

 {'working': ['fulltime', 'partime', 'intership', 'volunteer'],
 'thing': ['science', 'grammar', 'universe', 'unicorn']}
  

Спасибо

Ответ №1:

Один из способов с использованием dict понимания. Обратите внимание, что при этом предполагается, что ключ from d1 является уникальной подстрокой для ключа from d2 :

 {k2 if k1 in k2 else k1: v for k1, v in d1.items() for k2 in d2}
  

Вывод:

 {'working': ['fulltime', 'partime', 'intership', 'volunteer'],
 'thing': ['science', 'grammar', 'universe', 'unicorn']}
  

Ответ №2:

Основываясь на ответе @Chris, вы также можете проверить, находятся ли значения списка d1 в d2 :

 {k2 if set(v1).issubset(set(v2)) else k1: v1 for k1, v1 in d1.items() 
     for k2, v2 in d2.items()}
  

Для достижения сравнения я преобразую значения списка в наборы.