#python #python-2.7 #dictionary #difference
#python #python-2.7 #словарь #разница
Вопрос:
У меня есть два словаря списков:
dic1 = {'a' : [3, 4, 5], 'b' : [0, 1, 2]}
dic2 = {'a' : [3, 4, 5], 'b' : [8, 1, 2, 30], 'c' : [9, 8, 2]}
и хотите третий, в котором есть только то, что есть во втором словаре, а не в первом:
dic3 = {'b' : [8, 30], 'c' : [9, 8, 2]}
какой наиболее понятный способ сделать это в python 2.7
и ниже?
Ответ №1:
Вы можете использовать понимание dict для перебора элементов dic2
, чтобы построить новое сопоставление разнице между списками dic2
и dic1
одних и тех же ключей, используя set difference, отфильтровывая ключи с одинаковыми значениями списка в обоих dicts:
{k: list(set(l).difference(dic1.get(k, []))) for k, l in dic2.items() if dic1.get(k) != l}
Это возвращает:
{'b': [8, 30], 'c': [8, 9, 2]}
Ответ №2:
(Без понимания dict)
Вы могли бы использовать difference
available на set
объектах:
dic1 = {'a' : [3, 4, 5], 'b' : [0, 1, 2]}
dic2 = {'a' : [3, 4, 5], 'b' : [8, 1, 2, 30], 'c' : [9, 8, 2]}
for k, v in dic2.items():
if k in dic1.keys():
new_v = list(set(v).difference(dic1[k]))
if len(new_v) > 0: dic3[k] = new_v
else:
dic3[k] = v
Это обеспечит желаемый результат.
Комментарии:
1. Это близко к тому, что я печатал, когда решил спросить.
Ответ №3:
Если какой-либо ключ dic2
отсутствует в dic1
или значение, соответствующее какому-либо ключу, отличается в обоих словарях, затем добавьте эту пару ключ-значение в другой словарь.
for k in dic2.keys():
if (k not in dic1.keys()) or (dic1[k] != dic2[k]):
dic3[k] = dic2[k]