从另外两本词典的差异中创建词典的最佳方法是什么?

2024-03-29 05:01:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两本词典:

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

在python2.7及以下版本中,最具python风格的方法是什么?你知道吗


Tags: 方法版本内容风格词典dic2本词典dic1
3条回答

您可以使用dict理解来迭代dic2的项,以使用set difference构建到相同键的dic2dic1列表之间的差异的新映射,同时过滤出两个dict中具有相同列表值的键:

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

(没有听写理解)

您可以使用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

这将提供所需的输出。你知道吗

如果dic2的任何键在dic1中不存在,或者任何键对应的值在两个字典中都不同,则将该键、值对添加到另一个字典中。你知道吗

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

相关问题 更多 >