Какой лучший способ создать словарь из различий двух других словарей? - PullRequest
1 голос
/ 09 марта 2019

У меня есть два словаря списков:

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]}

что такоенаиболее питонический способ сделать это в питоне 2.7 и ниже?

Ответы [ 3 ]

2 голосов
/ 09 марта 2019

Вы можете использовать понимание dict для итерации по элементам dic2, чтобы построить новое сопоставление различий между списками dic2 и dic1 одних и тех же ключей с использованием заданной разницы, при этом отфильтровывая ключи с идентичными список значений в обоих словах:

{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]}
1 голос
/ 09 марта 2019

(без точного понимания)

Вы можете использовать difference для 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

Это обеспечит желаемый результат.

0 голосов
/ 09 марта 2019

Если какой-либо ключ dic2 отсутствует в dic1 или значение, соответствующее любому ключу, отличается в обоих словарях, добавьте эту пару ключ-значение в другой словарь.

 for k in dic2.keys():
   if (k not in dic1.keys()) or (dic1[k] != dic2[k]):
     dic3[k] = dic2[k]
...