根据其他两个词典的差异创建词典的最佳方法是什么?
What's the best way to create a dictionary from the difference of two other dictionaries?
我有两个列表字典:
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
及以下版本中最 pythonic 的方法是什么?
您可以使用字典理解遍历 dic2
的项目,以使用 set 构建到相同键的 dic2
和 dic1
列表之间差异的新映射差异,同时过滤掉两个字典中具有相同列表值的键:
{k: list(set(l).difference(dic1.get(k, []))) for k, l in dic2.items() if dic1.get(k) != l}
这个returns:
{'b': [8, 30], 'c': [8, 9, 2]}
(没有听写理解)
您可以在 set
个对象上使用 difference
:
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
这将提供所需的输出。
如果 dic2
的任何键在 dic1
中不存在或对应于任何键的值在两个字典中不同,则在另一个字典中添加该键值对。
for k in dic2.keys():
if (k not in dic1.keys()) or (dic1[k] != dic2[k]):
dic3[k] = dic2[k]
我有两个列表字典:
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
及以下版本中最 pythonic 的方法是什么?
您可以使用字典理解遍历 dic2
的项目,以使用 set 构建到相同键的 dic2
和 dic1
列表之间差异的新映射差异,同时过滤掉两个字典中具有相同列表值的键:
{k: list(set(l).difference(dic1.get(k, []))) for k, l in dic2.items() if dic1.get(k) != l}
这个returns:
{'b': [8, 30], 'c': [8, 9, 2]}
(没有听写理解)
您可以在 set
个对象上使用 difference
:
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
这将提供所需的输出。
如果 dic2
的任何键在 dic1
中不存在或对应于任何键的值在两个字典中不同,则在另一个字典中添加该键值对。
for k in dic2.keys():
if (k not in dic1.keys()) or (dic1[k] != dic2[k]):
dic3[k] = dic2[k]